繁体   English   中英

哪个是更好的linq查询? .Where(crit).FirstOrDefault()或.Where(crit).FirstOrDefault(someOtherCrit)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM