我正在尝试使用SubSonic OrderBy()
上的自定义IComparer
致电IQueryable
,如下所示:
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);
}
}
(这是一个用于调试目的的简单实现。实际实现会更复杂。)
我在这里缺少什么?
答案 0 :(得分:2)
您缺少的是SubSonic无法反映您的比较运算符并弄清楚如何将其转换为SQL。可能你最好的选择是先将对象拉入内存(基于任何标准),然后用比较器对它们进行排序。