Как делегировать части предложения where в другую область - PullRequest
1 голос
/ 13 сентября 2011

Конкретная ситуация, которую я сейчас пытаюсь обойти, связана с булом?ссылка на обнуляемое битовое поле в базе данных.Но логика должна применяться ко многим различным случаям.

Я использую Entity Framework и у меня есть объект с bool?имущество.Я начинаю писать много Linq вокруг этого конкретного свойства, но потому что Sql не получает нулевые значения, когда bool?! = true написано, я нахожу, что пишу запросы, которые выглядят следующим образом:

var Result = from f in FooList
             where f.NullableBool == false || f.NullableBool == null
             where f.Bar.Contains(SearchTerm)
             select f;

Это не большая проблема, но я действительно хотел бы иметь возможность удалить "x.NullableBool == false || x.NullableBool == false "в другое место и вместо этого вызвать что-то вроде:

var Result = from f in FooList
             where f.IsNot && f.Bar.Contains(SearchTerm)
             select f;

Я попытался добавить свойства и методы таких типов, как 'Expression >',' Func 'и' bool 'для класса Foo, но Linq, похоже, не нравится им.

Любые указатели очень ценятся.

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Метод расширения IQueryable должен работать:

public static class QueryExtensions
{
    public static IQueryable<Foo> WhereIsNot(this IQueryable<Foo> query)
    {
        return query.Where(f => 
            f.NullableBool == false || f.NullableBool == false);
    }
}

Тогда вы можете использовать его следующим образом:

var result = from f in FooList.WhereIsNot()
             where f.Bar.Contains(SearchTerm)
             select f;
0 голосов
/ 13 сентября 2011

Полагаю, вы можете написать простой метод расширения

public static bool IsNot (this Foo f)
{
    return f.NullableBool == false || f.NullableBool == false;
}

и используйте его вот так

var Result = from f in FooList
         where f.IsNot() && f.Bar.Contains(SearchTerm)
         select f;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...