2009-11-09 88 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。可能你最好的選擇是先把對象拉到內存中(根據任何標準),然後用比較器對它們進行排序。