Коррелированный SubQuery SQL для LINQ - PullRequest
0 голосов
/ 08 августа 2011
select * 
  from Table1 
 where TC in (select TC 
                from Table2 
               where Application in ('AAA'))`

помогите мне преобразовать указанный выше запрос в LINQ.

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Без where Application in ('AAA') части это выглядит довольно просто:

from t1 in db.Table1s
where db.Table2s.Select(t2 => t2.TC).Contains(t1.TC)
from t1 in db.Table1s

ОБНОВЛЕНИЕ (Как я ошибался!)

List<string> myCollection = new List<string> { "AAA" };
from t1 in db.Table1s
where db.Table2s.Where(t2 => myCollection.Contains(t2.Application)).Select(t2 => t2.TC).Contains(t1.TC)
from t1 in db.Table1s

должен работать с коллекциями в коде.

0 голосов
/ 08 августа 2011

Попробуйте таким образом

В LINQ (пока) нет подзапроса 'In'.

Используйте оператор 'Any', чтобы выполнить то же самое.

Например:

все клиенты, которые находятся в одном городе с сотрудником

   from c in db.Customers
   where db.Employees.Any(e => e.City == c.City)
   select c;

или

Левая сторона .Any ()оператор является подзапросом.

query.Any(x => predicate)

эквивалентен SQL

EXISTS(
    SELECT *
    FROM query
    WHERE predicate
    )

, подробности здесь

http://social.msdn.microsoft.com/Forums/en-AU/linqprojectgeneral/thread/360166df-4e50-44d8-812a-04b5bc4fedd1

...