Как я могу реализовать select case в Entity Framework?

#linq #entity-framework #entity-framework-4

#linq #entity-framework #entity-framework-4

Вопрос:

У меня есть запрос с CASE в SQL, как я могу это сделать с Entity Framework?

  DECLARE @SystemTypeId int
 SELECT @SystemTypeId = [SystemTypeId] FROM [Properties] WHERE [Id] = @PropertyId

 SET @RETURN_VAL =
 CASE @SystemTypeId
  WHEN 2 THEN (SELECT [Created] FROM [Assets] WHERE [Id] = @AssetId) 
  WHEN 3 THEN (SELECT dbo.GetAssetValueById([CreatedBy])
               FROM [Assets]
               WHERE [Id] = @AssetId)
  WHEN 9 THEN (SELECT [LastModified]
               FROM [Assets]
               WHERE [Id] = @AssetId)
  ELSE NULL
END
  

Ответ №1:

При использовании оператора Linq-to-Entities не будет генерировать для вас оператор CASE, кроме двоичного оператора CASE ? : .

Вы можете либо запустить его в двух запросах: сначала получить SystemTypeId, затем выполнить соответствующий запрос.

Или вы можете обойти Linq и запустить необработанный SQL, что часто является лучшим подходом, если у вас сложный запрос.