希望进行一些重构...使用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();
}
其中一个比另一个好吗?任何提示,链接或代码总是受到赞赏。 干杯!
答案 0 :(得分:3)
将谓词分成两个块似乎让我感到困惑。我会将“过滤”代码保存在一个位置,并将其全部放在.Where
(您的第二个示例)中或全部放在.FirstOrDefault
中。后一种选择更简洁,使用的操作员更少,因此通常是理想的选择。
答案 1 :(得分:3)
在linq2objects或linq2sql中你可以像这样写一个FirstOrDefault:
public Widget FindByCode(string code)
{
return
_session
.Query<Widget>()
.FirstOrDefault(w => !w.IsDeleted && w.Code == code);
}
不确定NHibernate,但可能有效。并且您始终可以使用NHProf或常规sql profiler检查生成的sql。
答案 2 :(得分:0)
第二个更好,因为它只会根据两个标准进行一次投影。第一个将根据第一个标准进行第一次投影,然后根据第二个标准应用第二个投影。 我建议使用第二种方法。