我可以在Where()中使用FirstOrDefault()或First()吗
我正在尝试实现此查询:
data.Where(d => d.ObjectsA != null &&
d.ObjectsA.First().ObjectsB != null &&
d.ObjectsA.First().ObjectsB().First().Nr == 1)
in Nhibernate.Linq,但出现错误。 当我从Where() 中删除First() 时,一切正常。 我尝试这个解决方案,但这没有得到我所需要的。
data.Where(d => d.ObjectsA.Where(a.ObjectsB.Where(b=>b.Nr == 1).Any()).Any());
我可以在Where()中使用FirstOrDefault()或First()吗?
编辑:在我的数据库表中,本示例中的所有行都没有空值。
I am trying to implement this query:
data.Where(d => d.ObjectsA != null &&
d.ObjectsA.First().ObjectsB != null &&
d.ObjectsA.First().ObjectsB().First().Nr == 1)
in Nhibernate.Linq, but I have an error.
When I delete First() from Where() all work.
I try this solution but this don't get what I need.
data.Where(d => d.ObjectsA.Where(a.ObjectsB.Where(b=>b.Nr == 1).Any()).Any());
Can I use FirstOrDefault() or First() inside Where() ?
EDIT : In my DB tables all rows in this example don't have null values.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果集合为空,First() 将引发异常。在
Where()
Any() > call 确实应该可以解决问题,但是您必须编写如下内容:这不太好,因为
First()
最终会对相同的数据调用多次。我建议向 lambda 表达式添加主体,并使用 FirstOrDefault() 的中间变量:编辑:上面的第二个代码片段显然不适用于 LINQ to NHibernate。如果您可以使用查询语法并且不必检查
ObjectsA
和ObjectsB
是否为null
,您可以编写:First() will throw an exception if the collection is empty. Using Any() in your
Where()
call should indeed solve the problem, but you would have to write something like:That's not very nice, because
First()
ends up being called several times on the same data. I'd suggest adding a body to your lambda expression and using intermediate variables with FirstOrDefault():EDIT: The second code fragment above apparently does not work with LINQ to NHibernate. If you can use query syntax and don't have to check if
ObjectsA
andObjectsB
arenull
, you can write:如果条件中使用的集合可以为空,则可以使用默认变量和 ?? nullif 运算符与 FirstOrDefault()。
If the collections used in the condition can be empty, you can use a default variable and the ?? nullif operator with FirstOrDefault().