我一直在尝试OrderBy
使用 LINQ 语句来处理匿名对象,但现在失败了。
我已经检查了这些:
匿名 IComparer 实现
C# linq sort - 实例化 IComparer 的快速方法
如何在 C# 中按特定字段对对象数组进行排序?
我花了几个小时尝试不同的方法,但一定有我遗漏的东西。
假设有以下课程:
public class Product
{
public int Id {get; set;}
public string Name {get; set;}
public int Popularity {get; set;}
public decimal Price {get; set;}
}
并且products
是这些对象的列表。
如何完成此 LINQ 语句,以便它与匿名对象一起使用?
需要明确的是,我知道我可以以不同的方式做到这一点,但我非常有兴趣学习如何使这个特定的例子工作。
var sortedProducts = products
.OrderBy(p =>
new {p.Popularity, p.Price},
[IComparer magic goes here]);
似乎应该可以实现ProjectionComparer
:
http ://code.google.com/p/edulinq/source/browse/src/Edulinq/ProjectionComparer.cs?r=0c583631b709679831c99df2646fc9adb781b2be
任何想法如何做到这一点?
更新:
我对此进行了快速性能测试 - 匿名比较器解决方案与标准 orderby.thenby 解决方案似乎匿名解决方案相当慢,这可能是我们可能已经预料到的。
numProd | Anon | chained orderby clauses
10 000 | 47 ms | 31 ms
100 000 | 468 ms | 234 ms
1 000 000| 5818 ms | 2387 ms
5 000 000| 29547 ms| 12105 ms