比方說,我有決定是否某些字符串「匹配」,像這樣的一個特殊的方式:如何在使用LINQ to Entities和輔助方法時保持DRY?
public bool stringsMatch(string searchFor, string searchIn)
{
if (string.IsNullOrEmpty(searchFor))
{
return true;
}
return searchIn != null &&
(searchIn.Trim().ToLower().StartsWith(searchFor.Trim().ToLower()) ||
searchIn.Contains(" " + searchFor));
}
我想拉出來比賽使用LINQ to實體和這個輔助數據庫。然而,當我試試這個:
IQueryable<Blah> blahs = query.Where(b => stringsMatch(searchText, b.Name);
我得到「LINQ到實體無法識別方法......」
如果我重新寫代碼:
IQueryable<Blah> blahs = query.Where(b =>
string.IsNullOrEmpty(searchText) ||
(b.Name != null &&
(b.Name.Trim().ToLower().StartsWith(searchText.Trim().ToLower()) ||
b.Name.Contains(" " + searchText)));
哪在邏輯上是等效的,那麼事情工作正常。問題在於代碼不可讀,我必須爲每個我想匹配的實體重新編寫代碼。
據我所知,如this one這樣的問題,我想要做的事現在是不可能的,但我希望我失去了一些東西,是嗎?
嘗試[Predicate Builder](http://www.albahari.com/nutshell/predicatebuilder.aspx) – Eranga