LINQ - 使用匿名类型的Contains方法

7
使用以下代码(为了提问而简化):
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;

我遇到了以下错误:
方法 'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable, TSource)' 的类型参数不能从使用中推断出来。请尝试明确指定类型参数。
我需要通过COLUMN_B过滤第一个结果,但我不知道该怎么做。有什么方法可以过滤它吗?
3个回答

14

要使用Contains,您必须在 IEnumerable<T> 中传递该类型的实例。但是,对于匿名类型来说,这非常困难。

相反,我建议使用Any扩展方法重载,它允许您指定比较lambda表达式。例如:

var rows2 = (from t2 in db.TABLE2
    where (rows1.Any(x => x.COLUMN_B == t2.COLUMN_A))
    select t2;

1

尝试使用 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;

0

这个能用吗?

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接