除了提供文本查询的功能外,Redis OM 还为您提供了执行数值相等和数值范围查询的功能。假设模型为
[Document]
public class Employee
{
[Indexed]
public string Name { get; set; }
[Indexed(Aggregatable = true)]
public int Age { get; set; }
[Indexed(Aggregatable = true)]
public double Sales { get; set; }
[Searchable(Aggregatable = true)]
public string Department { get; set; }
}
假设我们已经连接到 Redis 并检索了一个 RedisCollection
并播种了一些数据,如下所示
var employees = provider.RedisCollection<Employee>();
var e1 = new Employee {Name = "Bob", Age = 35, Sales = 100000, Department = "EMEA Sales"};
var e2 = new Employee {Name = "Alice", Age = 52, Sales = 300000, Department = "Partner Sales"};
var e3 = new Employee {Name = "Marcus", Age = 42, Sales = 250000, Department = "NA Sales"};
var e4 = new Employee {Name = "Susan", Age = 27, Sales = 200000, Department = "EMEA Sales"};
var e5 = new Employee {Name = "John", Age = 38, Sales = 275000, Department = "APAC Sales"};
var e6 = new Employee {Name = "Theresa", Age = 30, Department = "EMEA Ops"};
employees.Insert(e1);
employees.Insert(e2);
employees.Insert(e3);
employees.Insert(e4);
employees.Insert(e5);
employees.Insert(e6);
现在,您可以使用 LINQ 表达式对数据中的数值执行查询,就像使用任何其他集合一样。
var underThirty = employees.Where(x=>x.Age < 30);
var middleTierSales = employees.Where(x=>x.Sales > 100000 && x.Sales < 300000);
当然,您也可以将数值查询与文本查询配对
var emeaMidTier = employees.Where(x=>x.Sales>100000 & x.Sales <300000 && x.Department == "EMEA");
如果一个 Indexed
字段被标记为 Sortable
或 Aggregatable
,您可以使用 OrderBy
谓词按该字段排序。
var employeesBySales = employees.OrderBy(x=>x.Sales);
var employeesBySalesDescending = employees.OrderByDescending(x=>x.Sales);