将OrderBy与自定义IComparer与SubSonic一起使用

时间:2009-11-09 20:40:28

标签: subsonic sql-order-by icomparer

我正在尝试使用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);
  }
}

(这是一个用于调试目的的简单实现。实际实现会更复杂。)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

您缺少的是SubSonic无法反映您的比较运算符并弄清楚如何将其转换为SQL。可能你最好的选择是先将对象拉入内存(基于任何标准),然后用比较器对它们进行排序。