2015年09月10日

EntityFramework(2):テーブルからデータを取得する

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回は、「EntityFramework事始め」と題して、Database FirstでのEntityFrameworkの簡単な使い方を説明しましたが、今回は、NorthwindデータベースのProductsテーブルを使って、いくつかの簡単 なクエリを書いてみました。

最初のサンプルは、これ。
 

 using (var db = new NorthwindContext()) {
     var query = from product in db.Products
                 where product.UnitPrice < 10
                 select product;
     foreach (var p in query)
         Console.WriteLine("{0} | {1} | {2} | {3}",
             p.ProductID, p.ProductName, p.CategoryID, p.UnitPrice);
 }


Productsテーブルから、UnitPriceが10より小さいものを取得しています。 結果は省略します。


では、次の例。
 

 using (var db = new NorthwindContext()) {
     var maxprice = db.Products.Select(p => p.UnitPrice).Max();
     Console.WriteLine("{0}", maxprice);
 }


Productsテーブルから最も高い単価(UnitPrice)が幾らなのかを見つけています。
クエリ構文ではなくメソッド構文を使った例です。
クエリ構文苦手なので、以降、断りなしにメソッド構文使っていきます。 たまに、気が向いたらクエリ構文使います。
 

次は、UnitsInStockで降順に並び替え、先頭の10製品を求める例です。
 

 using (var db = new NorthwindContext()) {
     var query = db.Products
                   .OrderByDescending(x => x.UnitsInStock)
                   .Take(10);
     foreach (var p in query)
         Console.WriteLine("{0} | {1} | {2} | {3}",
             p.ProductID,  p.UnitsInStock, p.ProductName, p.CategoryID);
 }



最後の例です。
  

 using (var db = new NorthwindContext()) {
     var query = db.Products
                   .Where(x => x.CategoryID == 5)
                   .Select(x => new {
                       x.ProductID,
                       x.CategoryID,
                       x.ProductName,
                       x.UnitPrice
                   });
     foreach (var p in query)
         Console.WriteLine("{0} | {1} | {2} | {3}",
             p.ProductID, p.ProductName, p.CategoryID, p.UnitPrice);
 }


CategoryIDが5の製品を取得しています。その際、データベースからは、 ProductID, ProductName, CategoryID,UnitPrice だけを取得しています。 匿名クラスを使っています。
LINQ to Objectが分かっていれば、どれも、どうってことのないクエリですね。



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52435097