Table サービスに対する LINQ クエリの記述

LINQ 構文を使用して、テーブル サービスに対するクエリを作成できます。 次の例では、REST プロトコルではなく LINQ を使用して、 テーブルとエンティティのクエリに示されているサンプル クエリと同様のサンプル クエリを記述する方法を示します。

Table サービスでは、エンティティのすべてのプロパティを取得する単純なクエリの実行がサポートされています。エンティティのプロパティのサブセットを選択することもできます。 Table Service では、Where 演算子を使用してクエリ結果をフィルター処理でき、Take 演算子を使用して返すエンティティ数を指定できます。

Table Service でサポートされている LINQ 演算子の詳細については、「Table Service で サポートされるクエリ演算子」を参照してください。

エンティティ プロパティの射影

LINQ select 句を使用して、1 つ以上のエンティティからプロパティのサブセットを射影できます。 射影できるプロパティの最大数は 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 つのプロパティを射影します。 この例では、A から J が SampleEntity の 10 個のプロパティになります。

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 回のクエリで取得できるエンティティの上限は 1,000 件です。 Take 演算子に 1,000 より大きい値を指定すると、エラー コード 400 (Bad Request) が返されます。

次の例は、Customers テーブルから最初の 10 件のエンティティを返します。

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

文字列プロパティのフィルター処理

次の例では、2 つの文字列プロパティをフィルター処理しています。

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

次の例は、比較演算子を使用してプレフィックスの照合を実行して、文字 'A' で始まる LastName プロパティを持つエンティティを返します。

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

数値プロパティのフィルター処理

次の例は、値が 30 より大きい Age プロパティを持つすべてのエンティティを返します。

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

次の例は、値が 100.25 以下の AmountDue プロパティを持つすべてのエンティティを返します。

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;  

参照

テーブルとエンティティのクエリ
テーブル サービスでサポートされるクエリ演算子