LINQ - Содержит с анонимным типом

При использовании этого кода (упрощенный для выяснения):

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C });

var rows2 = (from t2 in db.TABLE2
    where (rows1.Contains(t2.COLUMN_A))
    select t2;

Я получил следующую ошибку:

Аргументы типа для метода 'Система. Linq. Счетный. Содержит (Система. Наборы. Универсальный. IEnumerable, TSource)', не может быть выведен из использования. Попытайтесь указать аргументы типа явно.

Я должен отфильтровать первый результат COLUMN_B, но я не знаю как. Существует ли способ отфильтровать его?

5
задан Marlos 17 March 2010 в 18:59
поделиться

3 ответа

Чтобы использовать Contains, вы должны передать экземпляр типа в IEnumerable . Это очень сложно с анонимными типами.

Вместо этого я бы использовал перегрузку метода расширения Any , которая позволяет указать лямбда-выражение сравнения. Например

var rows2 = (from t2 in db.TABLE2
    where (rows1.Any(x => x.COLUMN_B == t2.COLUMN_A))
    select t2;
10
ответ дан 13 December 2019 в 19:24
поделиться

Попробуйте использовать Any

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C });

var rows2 = (from t2 in db.TABLE2
    where (rows1.Any( r => r.COLUMN_B == t2.COLUMN_A))
    select t2;
1
ответ дан 13 December 2019 в 19:24
поделиться

это работает?

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C }).ToList();

var rows2 = (from t2 in db.TABLE2
    where (rows1.Contains(t2.COLUMN_A))
    select t2;
0
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: