2010-03-17 114 views
4

使用此代码时(简化问):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; 

我得到了以下错误:

The type arguments for method 'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable, TSource)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我需要COLUMN_B筛选的第一个结果,但我不知道如何。有没有过滤它的方法?

回答

8

为了使用包含,您必须在IEnumerable<T>中传递该类型的实例。匿名类型非常困难。

相反,我会使用Any扩展方法重载,它允许您指定一个比较lambda。例如

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

谢谢。有用! – Marlos 2010-03-17 19:12:55

1

尝试使用任何

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; 
+0

不在这里,但谢谢。 – Marlos 2010-03-17 19:12:29