【发布时间】:2011-06-01 12:28:01
【问题描述】:
我偶然发现了一些奇怪的 LINQ to SQL 行为 - 任何人都可以对此有所了解吗?
我想定义一个 lambda 表达式并在我的 LINQ 语句中使用它。以下代码工作正常:
[...]
Func<Table1, bool> lambda = x => x.Id > 1000;
var result = dataContext.Table1s.Where(lambda);
[...]
但是当我尝试在关联表的语句中使用我的 lambda 表达式时
[...]
Func<Table1, bool> lambda = x => x.Id > 1000;
var result = dataContext.Table2s.Where(x => x.Table1s.Any(lambda));
[...]
我得到一个例外:
Unsupported overload used for query operator 'Any'.
但是,我不明白:当我将我的 lambda 直接放入查询时它工作正常:
[...]
var result = dataContext.Table2s.Where(x => x.Table1s.Any(y => y.Id > 1000));
[...]
为什么?!
谢谢。
【问题讨论】:
-
尝试使用
var lamda = x => x.Id > 1000;。不知道会不会有帮助,但可能... -
@Alxandr - 这实际上是不合法的。 Lambda 表达式可以编译为
Func<>或Expression<Func<>>,在您的示例中,编译器将无法判断您想要哪个,并且会抛出错误。
标签: linq-to-sql