1

有一个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)
   {
   }
}

消息(从德语翻译)是

“System.Nullable 类型无法转换为 System.Object。LINQ to Entities 仅支持转换原始类型或枚举类型”。

我做错了什么?

4

2 回答 2

1

尝试编写这样的AllSorted方法:

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

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

于 2013-01-19T18:38:19.937 回答
0

尝试这个

public IQueryable<Customer> AllSorted<T>(Expression<Func<Customer, T>> orderby)
{
   return _oContext.Customers.OrderBy(orderby);
}
于 2013-01-19T18:36:59.137 回答