Utilizzando OrderBy con IComparer personalizzato con SubSonic
-
19-09-2019 - |
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?
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.