[英]Which is a better linq query? .Where(crit).FirstOrDefault() or .Where(someCrit).FirstOrDefault(someOtherCrit)?
希望做一些重构...使用NHibernate,我目前有这个查询
public Widget FindByCode(string code)
{
return
_session
.Query<Widget>()
.Where(w => !w.IsDeleted)
.FirstOrDefault(w => w.Code == code);
}
我在想用这个
public Widget FindByCode(string code)
{
return
_session
.Query<Widget>()
.Where(w => !w.IsDeleted && w.Code == code)
.FirstOrDefault();
}
哪一个比另一个更好? 任何提示,链接或代码始终受到赞赏。 干杯!
将谓词分为两个部分似乎使我感到困惑。 我将“过滤”代码放在一个位置,然后全部放在.Where
(第二个示例)中,或者全部放在.FirstOrDefault
。 后一种选择更简洁,使用更少的运算符,因此通常是理想的选择。
在linq2objects或linq2sql中,您可以像这样编写FirstOrDefault:
public Widget FindByCode(string code)
{
return
_session
.Query<Widget>()
.FirstOrDefault(w => !w.IsDeleted && w.Code == code);
}
不确定NHibernate,但可能有效。 而且,您始终可以使用NHProf或常规sql profiler检查生成的sql。
第二个更好,因为它将仅基于两个标准进行一次投影。 第一个将基于第一标准进行第一投影,然后基于第二标准应用第二投影。 我建议使用第二种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.