2012-01-05 15 views
1

私はEF4を使用しています。 SQLをLINQにEFに変換しようとしていますが、エラーが発生しています。私は、EFがデータベース内のSQLを作成して実行することを望んでいます(メモリ内のものではありません)。比較は整数であるプリミティブ型を使用しています。エラーを修正するにはどうしたらいいですか?私は現在のグループを構文に使用することを考えています。Entity Frameworkエラー: '..'型の定数を作成できません。プリミティブタイプのみ

SQL:

SELECT Restaurant.RestaurantID 
     ,CASE WHEN FoodType.FoodTypeID IS NULL THEN NULL ELSE CustRating.Rating END AS Rating 
FROM    Restaurant Restaurant 
LEFT OUTER JOIN CustRating CustRating 
ON     Restaurant.RestaurantID = CustRating.RestaurantID 
LEFT OUTER JOIN FoodType FoodType 
ON     FoodType.FoodTypeID = CustRating.FoodTypeID 
AND  FoodType.FoodTypeName = 'Taco' 

LINQ:(LinqPadでテスト)

var query = 
     from restaurant in Restaurants 
     from customerRating 
     in CustomerRatings 
      .Where(cr => cr.RestaurantID == restaurant.RestaurantID) 
     .DefaultIfEmpty() 

     from foodType 
     in FoodTypes 
     .Where(ft => ft.FoodTypeID == customerRating.FoodTypeID && ft.FoodTypeName == "Taco") 
         .DefaultIfEmpty() 
     select restaurant;     
      query.Dump(); 

エラーメッセージ:

Unable to create a constant value of type 'CustomerRating'. 
Only primitive types ('such as Int32, String, and Guid') are supported in this context. 

答えて

0

私はああいいましたと一緒にに参加してください。私はまだ私が他のスタイルとの間違いを持っ​​ている理由に興味があります。

var query = from restaurant in Restaurants 
join cr in CustomerRatings on restaurant.RestaurantID equals cr.RestaurantID 
into children 
from child in children.DefaultIfEmpty() 
join foodType in FoodTypes 
on child.FoodTypeID equals foodType.FoodTypeID 
into children2 
from child2 in children2.Where(ft => ft.FoodTypeName == "Taco").DefaultIfEmpty() 

select new { RestaurantID = restaurant.RestaurantID, 
FoodTypeID = (int?) child2.FoodTypeID, 

Rating = ((int?) child2.FoodTypeID == null? 0 : (int?)child.Rating) 

}; 

query.Dump(); 
+0

最初のアプローチは間違っていました。期待したクエリではありませんでした。たとえそれが機能したとしても、2つのクロスジョインでクエリーを取得します。 –

関連する問題