动态顺序对可空列失败

本文关键字:失败 顺序 动态 | 更新日期: 2023-09-27 17:54:41

存在一个表Customers,其中cstCredit列可为空。下面的工作很好,可以迭代。

var query = _oContext.Customers.OrderBy(cst => cst.cstCredit);

但是,下面的代码在迭代时会失败。

public IQueryable<Customer> AllSorted(Expression<Func<Customer, object>> orderby)
{
   return _oContext.Customers.OrderBy(orderby);
}
void test()
{
   var query = AllSorted(cst => cst.cstCredit);
   foreach (Customer oCustomer in query)
   {
   }
}

消息(翻译自德语)为

"类型系统。Nullable不能转换为System.Object。LINQto Entities只支持转换基本类型或枚举类型"。

我做错了什么?

动态顺序对可空列失败

试着这样写AllSorted方法:

public IQueryable<Customer> AllSorted<TKey>(Expression<Func<Customer, TKey>> orderby)
{
   return _oContext.Customers.OrderBy(orderby);
}

它没有工作,因为像int?这样的可空类型是值类型,不派生自对象(并且是System.Nullable结构体的实例),因此Expression<Func<Customer, object>> orderby不会与它们一起工作。

试试这个

public IQueryable<Customer> AllSorted<T>(Expression<Func<Customer, T>> orderby)
{
   return _oContext.Customers.OrderBy(orderby);
}