linq选择vs代码与Any()

时间:2016-10-17 13:06:53

标签: c# performance linq lambda

我创建了2段代码,第一段我将调用查询,第二段我将调用代码。我这样做是为了问我的同事他们哪些更具可读性。

var activeNotifications = from activeNot in mActiveNotifications
                            where (from filter in activeNot.Notification.StationFilters
                                    where (from stat in filter.Stations
                                        where stat.Equals(station)
                                        select stat).Any()
                                    select filter).Any()
                            select activeNot;

代码:

var activeNotifications = mActiveNotifications.Where(x => x.Notification.StationFilters.Where(filter => filter.Stations.Where(stat => stat.Identification.Equals(station)).Any()).Any());

但是现在我遇到了一个问题,因为在哪里('lambda')。任何()比任何('lambda')慢得多。所以更快的代码看起来像这样:

var activeNotifications = mActiveNotifications.Where(x => x.Notification.StationFilters.Any(filter => filter.Stations.Any(stat => stat.Identification.Equals(station))));

所以我想知道是否有办法将上面的代码写成一个查询,因为我无法做出如下声明:'where any'。这是否意味着与代码相比,linq查询总是会更慢,因此我们必须将性能与可读性进行交换(如果它首先更具可读性,但这是一个不同的讨论)。

那么有没有办法在linq查询中使用'any'?或者我会更好地使用代码

P.S。我被告知.Any()比Where / Select / Find / FirstOrDefault /等更快。我没有测试过这是否属实,但它似乎更有可能,因为它可以在找到某些东西时停止,只需要返回布尔值而不是找到找到的对象。

0 个答案:

没有答案