Domanda

sto provando a chiamare OrderBy() utilizzando un IComparer personalizzato in un IQueryable SubSonic in questo modo:

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

Tuttavia quando poi provo a enumerare oltre sortedFoos o creare un PagedList<FooObject> usarlo, ottengo uno System.Exception: 'Il nodo espressione LINQ di tipo MemberInit non è supportato'

.

Questa è l'implementazione per FooObjectComparer:

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

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

(Questa è una semplice implementazione per il debugging. L'implementazione effettiva sarà più complessa).

Che cosa mi manca qui?

È stato utile?

Soluzione

Quello che manca è che SubSonic non può riflettere sul vostro operatore di confronto e capire come trasformarlo in SQL. Probabilmente la cosa migliore è di tirare gli oggetti prima nella memoria (in base a qualsiasi criterio) per poi ordinare con il vostro operatore di confronto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top