Использование OrderBy с пользовательским IComparer с SubSonic - PullRequest
0 голосов
/ 09 ноября 2009

Я пытаюсь позвонить OrderBy(), используя пользовательский IComparer на SubSonic IQueryable, например:

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

Однако когда я пытаюсь перечислить более sortedFoos или создать PagedList<FooObject>, используя его, я получаю System.Exception: «Узел выражения LINQ типа MemberInit не поддерживается».

Вот реализация для FooObjectComparer:

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

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

(Это простая реализация для целей отладки. Фактическая реализация будет более сложной).

Что мне здесь не хватает?

1 Ответ

2 голосов
/ 10 ноября 2009

Что вам не хватает, так это то, что SubSonic не может отразить ваш оператор сравнения и понять, как превратить его в SQL. Вероятно, вам лучше всего сначала поместить объекты в память (основываясь на любых критериях), а затем заказать их у вашего компаратора.

...