Ошибка Entity Framework: невозможно создать постоянное значение типа '..'. Только примитивные типы - PullRequest
1 голос
/ 06 января 2012

Я использую EF4.Я пытаюсь преобразовать SQL в LINQ to EF и получаю сообщение об ошибке.Я хочу, чтобы EF создавал и выполнял SQL в базе данных (а не делал вещи в памяти).Сравнение использует примитивные типы, которые являются целыми числами.Как мне исправить ошибку.Я думаю об использовании сейчас группы в синтаксис.

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.

1 Ответ

0 голосов
/ 06 января 2012

Я выбрал решение в .Мне все еще интересно, почему я получил ошибку с другим стилем.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...