Czy istnieje prosty sposób na napisanie niestandardowej funkcji w LINQ do jednostek?
Piszę proste zapytanie do mojej aplikacji Entity Framework. Muszę sprawdzić, czy kilka pól jest pustych, a jeśli nie, zadzwoń do ToLower () i porównaj z zapytaniem wyszukiwania. Zapytanie LINQ wygląda mniej więcej tak:
<code>public IQueryable<Store> SearchStores(string q, IQueryable<Store> source) { q = q.ToLower(); return ( from s in source where ( (s.Name != null && s.Name.ToLower().Contains(q)) || (s.Description != null && s.Description.ToLower().Contains(q)) || ... } </code>
Jest wiele takich linii, więc kusiło mnie, żeby napisać metodę pomocniczą, żeby trochę posprzątać:
<code>public static bool SafeSearch(this string s, string q) { return s == null ? false : s.ToLower().Contains(q); } </code>
To oczywiście nie działa, ponieważ LINQ dla podmiotów nie rozumie, czym jest funkcja SafeSearch:
LINQ to Entities nie rozpoznaje metody „Boolean SafeSearch (System.String, System.String)”, a tej metody nie można przetłumaczyć na wyrażenie magazynu.
Czy istnieje prosty sposób na napisanie prostej funkcji niestandardowej takiej jak ta?
Dzięki!