LINQ查询中的自定义Comparer,用于对字符串/数字进行排序

时间:2015-04-19 17:57:04

标签: c# linq

我编写了一个自定义比较器,用于对字符串和数字进行排序。一切正常。

然而,我正在重写我的整个BLL以尽可能使用LINQ,因为我喜欢语法。现在我磕磕绊绊地使用我的自定义比较器。由于LINQ语法(基于查询)不允许使用自定义比较器,我现在使用基于方法的LINQ。

但是为了使它工作,我需要做一个中间ToList(),它再次正常工作,但看起来有些奇怪吗?

        var areas = cc.Areas.Where(a => a.ProjectId == ProjectId).ToList()
                            .OrderBy(a => a.UnitNumber, new Common.Comparers.StringNumericComparer());

现在我不确定这是否与首先执行的SQL查询有关,然后结果在我的C#代码端排序,但这是我所不知道的。 ToList()是否强制在数据库上执行linq查询的第一部分?

2 个答案:

答案 0 :(得分:3)

是的,.ToList()强制您加载Areas并在内存中进行排序。

答案 1 :(得分:3)

是的,你的理解是正确的。直到.ToList()它才是IQueryable。在ToList()上,将触发数据库查询,并在内存中获取结果,然后在List上进行排序。

您的比较器在此之前无法执行,因为它不会转换为SQL查询。