Есть ли простой способ написать пользовательскую функцию в LINQ to Entities?

Я пишу простой поисковый запрос для своего приложения Entity Framework. Мне нужно проверить, являются ли куча полей нулевыми, а если нет, вызвать для них ToLower()и сравнить с поисковым запросом. Запрос LINQ выглядит примерно так:

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)) ||
           ...
}

Таких строк много, поэтому у меня возникло искушение написать вспомогательный метод, чтобы немного их очистить:

public static bool SafeSearch(this string s, string q)
{
    return s == null ? false : s.ToLower().Contains(q);
}

Это, конечно, не работает, так как LINQ сущности не понимают, что такое функция SafeSearch:

LINQ to Entities не распознает метод 'Boolean SafeSearch (System.String, System.String )', и этот метод не может быть преобразован в выражение хранилища.

Есть ли простой способ написать такую ​​простую пользовательскую функцию?

Спасибо!

9
задан ManicBlowfish 7 May 2012 в 04:26
поделиться