【发布时间】:2010-07-28 13:06:30
【问题描述】:
我正在开发一个ASP.NET MVC 应用程序,它使用以LINQ to SQL 作为我的数据源的存储库模式。在我的存储库中,我公开了以下方法:
public IEnumerable<T> Find(Expression<Func<T, bool>> where)
{
return _context.GetTable<T>().Where(where);
}
我可以这样称呼它:
repository<User>().Find(u => true);
但如果我尝试这样做(当搜索为空时)
repository<User>().Find(u => !string.IsNullOrEmpty(search) ? u.UserName.Contains(search) : true);
我得到错误:
值不能为空。参数名称:文本
我认为 lambda 表达式会执行相同的操作,因为 search 的值为 null,但显然不是这样。
我该如何解决这个问题?
【问题讨论】:
-
你能显示更多上下文吗?惰性求值使 LINQ 在不了解您如何使用其输出的情况下难以分析。
-
IsNullOrEmpty 和 Contains 的参数都称为
value,因此错误不是来自它们。 -
@SWeko:
string.Contains不会抛出异常,表达式解析器对调用string.Contains以构造LIKE表达式的评估会。
标签: c# .net linq lambda expression-trees