2009-11-09 85 views
0

我试图使用自定义IComparer调用OrderBy()在亚音速IQueryable像这样定制的IComparer:使用排序依据与亚音速

IQueryable<FooObject> sortedFoos = 
    FooObject.All() 
    .OrderBy(f => f, new FooObjectComparer()); 

然而,当我再尝试枚举sortedFoos或使用PagedList<FooObject>它创建,我得到一个System.Exception:'不支持MemberInit类型的LINQ表达式节点'。

这里是FooObjectComparer实现:

public class FooObjectComparer : IComparer<FooObject> 
{ 
    public FooObjectComparer() {} 

    public int Compare(FooObject x, FooObject y) 
    { 
    return x.MyProperty.CompareTo(y.MyProperty); 
    } 
} 

(这是用于调试目的的简单实现实际的实现将更加复杂)。

我在这里错过了什么?

回答

2

你缺少的是SubSonic无法反映你的比较运算符,并找出如何将其转换为SQL。可能你最好的选择是先把对象拉到内存中(根据任何标准),然后用比较器对它们进行排序。