带有的 Lambda 表达式和 System.Nullable
这无法编译:
void Foo()
{
using (var db = new BarDataContext(ConnectionString))
{
// baz is type 'bool'
// bazNullable is type 'System.Nullable<bool>'
var list = db.Bars.Where(p => p.baz && p.bazNullable); // Compiler:
// Cannot apply operator '&&' to operands of type
// 'System.Nullable<bool> and 'bool'
}
}
我是否真的必须通过两次运行来完成此操作,首先使用 as 条件,然后使用可为空条件运行该列表,或者是否有更好的干净平滑的最佳实践方法来执行此操作?
This can't compile:
void Foo()
{
using (var db = new BarDataContext(ConnectionString))
{
// baz is type 'bool'
// bazNullable is type 'System.Nullable<bool>'
var list = db.Bars.Where(p => p.baz && p.bazNullable); // Compiler:
// Cannot apply operator '&&' to operands of type
// 'System.Nullable<bool> and 'bool'
}
}
Do I really have to make this through two runs, where I first use the as condition and then run through that list with the nullable conditions, or is there a better clean smooth best practice way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
像这样的东西吗?
我不知道Linq-to-Sql是否可以处理它。
Something like this?
I don't know if Linq-to-Sql can handle it.
这里有两个问题:
由于某种原因,可空类型不支持短路
&&
。 (相关为什么没有解除短路运算符`bool?`?)第二个是即使 C# 支持,你的代码仍然没有意义。
Where
需要bool
作为条件的结果类型,而不是bool?
。因此,您需要决定如何处理baz==true
和bazNullable==null
的情况。这会导致
p.baz && (p.bazNullable==true)
或p.baz && (p.bazNullable!=false)
取决于你想要的。或者
p.baz && (p.bazNullable??false)
或p.baz && (p.bazNullable??true)
There are two issues here:
The shortcircuiting
&&
is not supported on nullable types for some reason. (Related Why are there no lifted short-circuiting operators on `bool?`?)The second is that even if it were supported by C#, your code still makes no sense.
Where
needs abool
as result type of your condition, not abool?
. So you need to decide how the case wherebaz==true
andbazNullable==null
should be treated.This leads to either
p.baz && (p.bazNullable==true)
orp.baz && (p.bazNullable!=false)
depending on what you want.Or alternatively
p.baz && (p.bazNullable??false)
orp.baz && (p.bazNullable??true)
您正在尝试应用逻辑 &&对可为空布尔值的操作。
如果您确定 p.bazNullable 不为 null,则可以尝试
,或者如果 null 值等于 false,则尝试
You're trying to apply a logical && operation to a nullable bool.
If you are sure that p.bazNullable is not null, then you can try
or if a null value equates to false, then try
你可以这样做:
you could just do:
使用:
要处理空异常,请使用:
use:
To handle null exceptions use:
这个怎么样
或者
How about this
OR