导出 (0) 打印
全部展开

编写针对表服务的 LINQ 查询

更新时间: 2014年8月

你可以使用 LINQ 语法编写针对表服务的查询。以下示例演示如何编写示例查询,它们与查询表和实体中的示例查询类似,但使用的是 LINQ 而不是 REST 协议。

表服务支持执行可检索实体的所有属性的简单查询;不能选择实体属性的子集。表服务还支持使用 Where 运算符筛选查询结果,并使用 Take 运算符指定要返回的实体数量。

有关表服务支持哪些 LINQ 运算符的详细信息,请参见表服务支持的查询运算符

LINQ select 子句可用于从一个或多个实体投影属性的子集。可投影的最大属性数为 255,这也是实体中的最大属性数。

要投影实体的属性,客户端必须支持 OData 数据服务 2.0 版(由 DataServiceVersionMaxDataServiceVersion 标头指示),如下所示:

DataServiceVersion: 2.0;NetFx
MaxDataServiceVersion: 2.0;NetFx

以下示例演示如何使用所需的对象初始值设定项从单个实体投影属性:

var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)
                 where entity.PartitionKey == "MyPartitionKey"
                 select new { entity.RowKey };

以下示例从具有 10 个属性的实体投影 3 个属性。在此示例中,SampleEntity 的 10 个属性为字母 A 到 J:

IEnumerable<SampleEntity> query = from entity in
                                       dataServiceContext.CreateQuery<SampleEntity>(tableName)
                                       where entity.PartitionKey == "MyPartitionKey"
                                       select new SampleEntity
                                      {
                                          PartitionKey = entity.PartitionKey,
                                          RowKey = entity.RowKey,
                                          A = entity.A,
                                          D = entity.D,
                                          I = entity.I
                                      };

不支持单个实体投影。由以下代码产生的 REST 请求无效:

var query = from entity in dataServiceContext.CreateQuery<SampleEntity>(tableName)
                 where entity.PartitionKey == "MyPartitionKey"
                 select { entity.RowKey }; // this code is invalid!

也可以使用标准 REST 请求中的 $select 查询选项来投影实体属性。有关详细信息,请参阅请求实体

有关实体投影和转换的更多信息,请参见 OData 文档中的选择系统查询选项 ($select)

要返回 n 个实体,请使用 LINQ Take 运算符。请注意,可在单个查询中返回的最大实体数为 1,000。为 Take 运算符指定大于 1,000 的值会导致出现错误代码 400(错误请求)。

以下示例从 Customers 表返回前 10 个实体:

var query = (from entity in context.CreateQuery<Customer>("Top10Customers")
                 select entity).Take(10);

以下示例对两个字符串属性进行筛选:

var query = from entity in context.CreateQuery<Customer>("SpecificCustomer")
                 where entity.LastName.Equals("Smith")
                 && entity.FirstName.Equals("John")
                 select entity;

以下示例使用比较运算符执行前缀匹配以返回 LastName 属性以字母“A”开头的实体:

var query = from entity in context.CreateQuery<Customer>("CustomersA")
                 where entity.LastName.CompareTo("A") >= 0
                 && entity.LastName.CompareTo("B") < 0
                 select entity;

以下示例返回 Age 属性的值大于 30 的所有实体:

var query = from entity in context.CreateQuery<Customer>("CustomersOver30")
                 where entity.Age > 30
                 select entity;

以下示例返回 AmountDue 属性值小于或等于 100.25 的所有实体:

var query = from entity in context.CreateQuery<Customer>("CustomersAmountDue")
                 where entity.AmountDue <= 100.25
                 select entity;

以下示例返回 IsActive 属性设置为 true 的所有实体:

var query = from entity in context.CreateQuery<Customer>("ActiveCustomers")
                 where entity.IsActive == true
                 select entity;

以下示例返回 CustomerSince 属性等于 2008 年 7 月 10 日的实体:

DateTime dt = new DateTime(2008, 7, 10);
var query = from entity in context.CreateQuery<Customer>("CustomerSince")
                 where entity.CustomerSince.Equals(dt)
                 select entity;

另请参阅

显示:
© 2014 Microsoft