針對資料表服務撰寫 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;