Как получить предложение IN в linq to EF с двумя таблицами? - PullRequest
0 голосов
/ 10 июня 2019

Я пишу запрос, чтобы выбрать некоторые данные в таблице A, где столбец C1 находится в столбце C2 таблицы B.

Такой запрос легко выполнить в SQL. Код выглядит примерно так:

select * from A where C1 in (Select C2 from B)

То, что я пробовал, похоже на этот код:

var InCluse = from p in B select new { p.C2 };
var query = from p in (from q in A
                       where InClause.Contains(q.C1)
                       select q)
            select p;

Но есть ошибка, которая говорит:

Код серьезности Описание Состояние подавления строки файла проекта Ошибка CS1929 «IQueryable <>» не содержит определения «Contains» и лучшей перегрузки метода расширения «AsyncEnumerable.Contains (IAsyncEnumerable, int)» требует приемник типа «IAsyncEnumerable» «ProjectName» «ClassFileAddress» 261 Active

Есть вопросы, подобные моему, но разница между этим и другими заключается в том, что другие вопросы касаются использования предложения "IN" для задания условия для массива некоторых данных, а не для таблицы.

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Почему бы просто не объединить А и В?

var res = ctx.A.Join(ctx.B, q => q.C1, q => q.C2, (q, w) => q);
1 голос
/ 10 июня 2019

SQL может быть буквально переведен на LINQ:

var ans = from a in A
          where (from b in B select b.C2).Contains(a.C1)
          select a;

Вы также можете использовать join для достижения того же результата:

var ans = from a in A
          join b in B on a.C1 equals b.C2
          select a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...