哪个是更好的 linq 查询? .哪里(暴击).FirstOrDefault() 或 .哪里(一些暴击).FirstOr

本文关键字:哪里 FirstOrDefault FirstOr 暴击 更好 linq 查询 | 更新日期: 2023-09-27 18:36:51

想要做一些重构...使用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();
  }

任何一个都比另一个好吗?任何提示、链接或代码总是值得赞赏的。干杯!

哪个是更好的 linq 查询? .哪里(暴击).FirstOrDefault() 或 .哪里(一些暴击).FirstOr

在 linq2objects 或 linq2sql 中,你可以像这样编写一个 FirstOrDefault:

public Widget FindByCode(string code)
 {
  return 
             _session
                 .Query<Widget>()
                 .FirstOrDefault(w => !w.IsDeleted && w.Code == code);
  }

不确定NHibernate,但可能有效。您可以随时使用 NHProf 或常规 sql 分析器检查生成的 sql。

将谓词分成两块对我来说似乎令人困惑。 我会将"过滤"代码保存在一个地方,要么全部放在.Where(您的第二个示例)中,要么全部放在.FirstOrDefault中。 后一个选项更简洁,使用更少的运算符,因此通常是理想的。

第二个更好,因为它只会根据两个标准进行一个投影。第一个将根据第一个标准进行第一个投影,然后基于第二个标准应用第二个投影。我建议使用第二种方法。