我正在使用AutoMapper IQueryable扩展ProjectTo来选择数据。 当我试图为使用这种扩展方法的方法编写单元测试时,我得到了这个例外。
至少有一个对象必须实现IComparable。
我还尝试实现ProjectTo扩展中使用的类型接口,但发生了同样的异常。
在单元测试中,我使用 Moq 来模拟EntityFramework DbContext
以下是返回异常的代码:
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()
};
NoLock()
的地方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;
}
}
有什么方法可以解决这个问题?
感谢您的任何建议
答案 0 :(得分:0)
我认为问题是由OrderBy(p => new { p.ProdDt, p.Cert })
引起的。您正在创建的任何对象都没有实现IComparable
,因此OrderBy不起作用。
如果您需要按多个条件排序,请使用ThenBy
方法:
query.OldestPacks
? freePacks.OrderBy(p => p.ProdDt).ThenBy(p => p.Cert).NoLock()
: freePacks.OrderByDescending(p => p.ProdDt).ThenByDescending(p => p.Cert).NoLock();