【发布时间】:2014-06-30 09:58:01
【问题描述】:
我想知道 LINQ OrderBy 是如何编写的?我试图重现:
IOrderedQueryable<T> MyOrderBy<T,TKey>(IQueryable<T> qry, Expression<Func<T,TKey> expr)
{
return qry.OrderBy(expr);
}
可以这样称呼:
MyOrderBy<Products,String>(qry, p=>p.Name);
将其重构为IQueryable的扩展方法,可以这样调用:
qry.MyOrderBy<String>(p => p.Name );
这与不需要字符串类型参数的 LINQ OrderBy 不同。如何在我的版本中避免这种情况?
ps:Object 不是替代品,因为它不适用于 Int32 和其他值类型字段(以及 EF Linq):
IOrderedQueryable<T> MyOrderByObject<T>(IQueryable<T> qry, Expression<Func<T,Object> expr)
{
return qry.OrderBy(expr);
}
将丢弃异常(如果 ID 是 Int32 字段):
qry.MyOrderByObject(p => p.ID ); // throws an exception
【问题讨论】:
-
嗨,看看这个,可能对hookedonlinq.com/OrderByOperator.ashx有帮助
-
抛出什么异常?
-
qry.MyOrderBy
(p => p.Name );不应该工作,因为 MyOrderBy 需要 2 个 Type 参数。 -
James - EntityFramework.SqlServer.dll 中发生了“System.NotSupportedException”类型的未处理异常附加信息:无法将“System.Int32”类型转换为“System.Object”类型。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
-
“对象不是替代品,因为它不适用于 Int32 和其他值类型字段”为什么不呢?
标签: c# linq entity-framework lambda