Cho phép nói rằng tôi có một cách đặc biệt của quyết định có một số chuỗi "trận đấu", như thế này:Làm thế nào để giữ DRY trong khi sử dụng LINQ to Entities và phương pháp trợ giúp?
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));
}
Tôi muốn kéo trận đấu ra khỏi một cơ sở dữ liệu sử dụng LINQ to Entities và helper này. Tuy nhiên, khi tôi cố gắng này:
IQueryable<Blah> blahs = query.Where(b => stringsMatch(searchText, b.Name);
tôi nhận được "LINQ to Entities không nhận ra phương pháp ..."
Nếu tôi viết lại các mã như:
IQueryable<Blah> blahs = query.Where(b =>
string.IsNullOrEmpty(searchText) ||
(b.Name != null &&
(b.Name.Trim().ToLower().StartsWith(searchText.Trim().ToLower()) ||
b.Name.Contains(" " + searchText)));
nào tương đương về mặt logic, sau đó mọi thứ hoạt động tốt. Vấn đề là mã không thể đọc được và tôi phải viết lại nó cho từng thực thể khác nhau mà tôi muốn khớp.
Theo như tôi có thể kể từ các câu hỏi như this one, những gì tôi muốn làm là không thể vào lúc này, nhưng tôi hy vọng rằng tôi đang thiếu một cái gì đó, phải không?
thử [Predicate Builder] (http://www.albahari.com/nutshell/predicatebuilder.aspx) – Eranga