LINQ对布尔值排序的最快方法

时间:2015-03-03 12:50:24

标签: c# linq

我想知道哪种方法可以更快地排序并通过LINQ从MS SQL数据库中选择元素:

.OrderBy(c => c.StartDate)
.ThenBy(c => !c.HasErrors)
.FirstOrDefault();

.OrderBy(c => c.StartDate)
.ThenByDescending(c => c.HasErrors)
.FirstOrDefault();

表格中的每个元素(HasErrors)的nagation是否会影响查询执行的时间?任何人都有关于这个问题的信息吗?

2 个答案:

答案 0 :(得分:1)

第二种方法理论上更快,因为在将它与TRUE进行比较之前,你并没有先在c.HasErrors上翻转它。

逻辑步骤如下

FIRST:

1. Order By start date
2. Set c.HasErrors = !c.HasErrors
3. Then Order By c.HasErrors
4. Then return the first record, or null

第二

1. Order By start date
2. Then Order Descending By c.HasErrors
3. Then return the first record, or null

在第一个实例中,您有一个额外的步骤供您的查询执行。并且它必须为每个记录执行它,因此项目列表越长,它执行它的次数就越多。

答案 1 :(得分:-1)

起初:我没有任何确认这一点的数据,但两种方法之间的差异几乎肯定不相关。数据库引擎很有可能在幕后做类似的事情。所以只需使用第二个版本,因为它更具可读性(在第一种方法中可能会被忽略)。

尽管你有疑问:如果你只需要第一个满足条件的那个,你为什么还要关心按布尔值排序?

怎么样:

.OrderBy(c => c.StartDate).FirstOrDefault(c => c.HasErrors);

我知道,存在一些小差异,因为如果没有没有错误的元素,你将获得null。您的解决方案将为第一个元素提供错误。但我想这就是你真正想要的(如果我错了就怪我)。