в linq для сущностей, как сделать внутренний EXISTS (SELECT 1 FROM ... тип запроса? - PullRequest
0 голосов
/ 06 марта 2011

Я пытаюсь написать LINQ эквивалент

SELECT C1, C2, C3
FROM T1
WHERE T1.C4='xyz' AND
      EXISTS (SELECT 1 FROM T2
             WHERE T1.C17 = T2.C24)
ORDER BY C3

Я использую EF CTP 5, поэтому у меня есть переменная DBContext с именем dbc, которая включает в себя объекты DBSet T1s и T2s, основанные на POCO T1и T2.

В LINQ я пишу

DIM IND = From i In dbc.T1s
          Where i.C4 = "xyz" 
          And (From t In dbc.T2s Where i.C17 = t.C24).Any
          Select i.C1, i.C2, i.C3
          Order By C3

Запустив запрос, я получаю сообщение об ошибке "Невозможно создать постоянное значение типа 'T2'. Только примитивные типы (', такие какInt32, String и Guid ') поддерживаются в этом контексте. "

Когда я опускаю внутреннее выражение (третья строка в коде LINQ), запрос выполняется нормально.

Я попытался изменить порядки внутреннего сравнения, чтобы они были t.C24 = i.C17, без эффекта.

Итак, что происходит, и как я могу это исправить?

1 Ответ

0 голосов
/ 07 марта 2011

Я изменил запрос на использование LINQ to SQL, чтобы dbc был объектом DataContext, и все в порядке. Кажется, что LINQ to Entities все еще (даже в .Net 4) довольно ограничен.

...