針對資料表服務撰寫 LINQ 查詢

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

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

如需資料表服務支援哪些 LINQ 運算子的詳細資訊,請參閱 資料表服務支援的查詢運算子

投射實體屬性

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

若要投影實體的屬性,用戶端必須支援 OData Data Service 3.0 版,並指定 或 MaxDataServiceVersion 標頭, DataServiceVersion 如下所示:

DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.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 要求中使用 $select 查詢選項來專案實體屬性。 如需詳細資訊,請參閱 查詢實體

如需實體投影和轉換的詳細資訊,請參閱 OData 檔中的 選取系統查詢選項 ($select)

傳回前 n 個實體

若要傳回前 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;  

篩選 DateTime 屬性

下列範例會傳回 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;  

另請參閱

查詢資料表和實體
表格服務支援的查詢運算子