銷售: 1-800-867-1380

撰寫針對表格服務的 LINQ 查詢

更新日期: 2014年8月

您可以使用 LINQ 語法撰寫針對表格服務的查詢。下列範例顯示如何使用 LINQ (而不是 REST 通訊協定) 寫入類似 查詢資料表和實體 中所示的範例查詢。

表格服務支援執行簡單查詢,以擷取實體的所有屬性,您無法選取實體的屬性子集。表格服務也支援使用 Where 運算子篩選查詢結果,以及使用 Take 運算子指定要傳回的實體數目。

如需表格服務支援之 LINQ 運算子的詳細資訊,請參閱<表格服務支援的查詢運算子>。

LINQ select 子句可用來投射一個或多個實體的屬性子集。您可以投射的屬性數目上限為 255,也就是實體的屬性數目上限。

若要投射實體的屬性,用戶端必須支援 OData Data Service 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;

另請參閱

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2015 Microsoft