2017-04-18 2 views
1

Ich verwende AutoMapper IQueryable Erweiterung ProjectTo zum Auswählen von Daten. Wenn ich versuche, Komponententest für diese Methode zu schreiben, die diese Erweiterungsmethode verwenden, bekomme ich diese Ausnahme.AutoMapper ProjectTo Erweiterung Mindestens ein Objekt muss IComparable implementieren

Mindestens ein Objekt muss IComparable implementieren.

Ich habe auch versucht, Schnittstelle für Typ zu implementieren, der in ProjectTo-Erweiterung verwendet wird, aber die gleiche Ausnahme trat auf.

In Unit-Test verwende ich Moq für spöttische EntityFramework DbContext

Hier ist der Code, die Ausnahme zurück:

freePacks = packageQuery.ProjectTo<PackageDTO>(); 

return new PackageQueryResult 
{ 
    query.OldestPacks 
     ? freePacks.OrderBy(p => new { p.ProdDt, p.Cert }).NoLock() 
     : freePacks.OrderByDescending(p => new { p.ProdDt, p.Cert }).NoLock() 
}; 

Wo nolock() ist

static List<T> NoLock<T>(this IQueryable<T> query) 
{ 
    var txn = new System.Transactions.TransactionScope(TransactionScopeOption.RequiresNew, 
      new TransactionOptions 
      { 
       IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted 
      })) 
     { 
      List<T> toReturn = query.ToList(); 
      txn.Complete(); 
      return toReturn; 
     } 
} 

Ist eine Möglichkeit, Wie kann ich dieses Problem lösen?

Vielen Dank für jede Beratung

Antwort

0

denke ich, das Problem durch die OrderBy(p => new { p.ProdDt, p.Cert }) verursacht wird. Das Anyhnomous-Objekt, das Sie erstellen, implementiert IComparable nicht, so funktioniert OrderBy nicht.

Verwenden Sie die ThenBy Methode, wenn Sie nach mehreren Kriterien sortieren müssen:

query.OldestPacks 
    ? freePacks.OrderBy(p => p.ProdDt).ThenBy(p => p.Cert).NoLock() 
    : freePacks.OrderByDescending(p => p.ProdDt).ThenByDescending(p => p.Cert).NoLock(); 
+0

Vielen Dank! Jetzt funktioniert es –

Verwandte Themen