我正在使用ASP.NET MVC應用程序,它使用存儲庫模式LINQ to SQL作爲我的數據源。說在LINQ to SQL'Lambda表達式怪異'條件
public IEnumerable<T> Find(Expression<Func<T, bool>> where)
{
return _context.GetTable<T>().Where(where);
}
我能夠把這個:在我的倉庫我露出下面的方法
repository<User>().Find(u => true);
但如果我嘗試做的(當搜索爲null)
repository<User>().Find(u => !string.IsNullOrEmpty(search) ? u.UserName.Contains(search) : true);
我收到錯誤:
Value cannot be null. Parameter name: text
I t因爲搜索的值爲null,所以要求lambda表達式執行相同的事情,但顯然不是這種情況。
我該如何解決這個問題?
你可以展示更多的上下文嗎?懶惰的評估使得LINQ很難分析,而不會看到你如何使用它的輸出。 – 2010-07-28 13:13:39
IsNullOrEmpty's和Contains的參數被稱爲'value',所以錯誤不是來自它們。 – SWeko 2010-07-28 13:14:59
@SWeko:'string.Contains'不會拋出異常,表達式解析器對'string.Contains'調用的評估來構造一個'LIKE'表達式。 – 2010-07-28 13:17:51