我目前正在努力解决的特殊情况涉及一个布尔?引用数据库中的可空位字段。但逻辑应该适用于许多不同的情况。
我正在使用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< Foo,bool> >','Func< Foo,bool>'和'bool'到Foo类,但Linq似乎不喜欢它们。
任何指针都非常感激。
由于
答案 0 :(得分:2)
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;
答案 1 :(得分:0)
我想你可以写一个简单的扩展方法
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;