2012-04-23 5 views
0

私はSQLの中毒者で、EFの構文は直感的ではありません。エンティティフレームワークでは、結合されたテーブルに対して "IN"クエリをどのように実行しますか?

私はレストランテーブルと食卓を持っています。私は食べ物が文字列リストのカテゴリに含まれる型を持つレストランと食品を欲しい。ここに私が望むものを大まかに表すいくつかのSQLがあります。

SELECT r.*, f.* 
FROM Restaurant R 
    JOIN food f on f.RestaurantID = r.RestaurantID 
WHERE f.Type IN ("Awesome", "Good", "Burrito") 

ここでは、そのSQLに変換するコードを示します。

List<string> types = new List<string>() { "Awesome", "Good", "Burrito"}; 
var dbrestaurants = from d in db.Restaurants 
        .Include("Food") 
        //where Food.Categories.Contains(types)//what to put here? 
        select d; 

答えて

0
where Food.Categories.Any(c => types.Contains(c.Name)) 
+0

だから、私は私のコードでは、私が得ることを置く:エラー1委任「System.Func 'は1つの引数を取らない – Jim

+0

おそらく、あなたが持っているすべてのクラスとメンバがわからないからです。私は間違った何かを得たに違いない。これを試してみてください:types.Contains(Food.Type) – usr

+0

私が問題になっているのは、 "Type"がFoodコレクションのプロパティとして利用できないということです。コレクション内の個々の食品アイテムでのみ利用できます。 – Jim

1

var restaurants = db.Restaurants.Where(r => types.Contains(r.Food.Type)); 
+0

(私の他のコメントに似ています) - "Category"は、Foodコレクション(Typeではなく)ではなく、個々のFoodアイテムのプロパティなので、r.Food.Typeのようなものを使用するとAFAIKは機能しません。 – Jim

+0

SQLクエリでは、テーブルRestaurantとFoodのみが表示されます。 – Phil

0

はこれを試してみてください試してみてください:

var dbRestaurants = 
from r in db.Restaurants 
join f in db.Foods on r.RestaurantId equals f.RestaurantId 
where types.Any(foodType => foodType == f.Type) 
select r; 
関連する問題