При использовании этого кода (упрощенный для выяснения):
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, но я не знаю как. Существует ли способ отфильтровать его?
Чтобы использовать Contains, вы должны передать экземпляр типа в IEnumerable
. Это очень сложно с анонимными типами.
Вместо этого я бы использовал перегрузку метода расширения Any
, которая позволяет указать лямбда-выражение сравнения. Например
var rows2 = (from t2 in db.TABLE2
where (rows1.Any(x => x.COLUMN_B == t2.COLUMN_A))
select t2;
Попробуйте использовать 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;
это работает?
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;