【发布时间】:2014-07-01 06:52:35
【问题描述】:
我想知道如何将 orderby 表达式存储在列表中。这就是我想写的:
List<Expression<Func<Products,Object>>> list = new List<Expression<Func<Products,Object>>>()
{
p => p.Name,
p => p.Id
};
然后:
var expr = list[0];
myProducts.OrderBy( expr );
适用于p.Name,但不适用于p.Id (list[1]),因为它会丢弃以下异常
EntityFramework.SqlServer.dll 中出现“System.NotSupportedException”类型的未处理异常 附加信息:无法将类型“System.Int32”转换为类型“System.Object”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
我必须使用哪种类型的列表?
【问题讨论】:
-
一种解决方法是写
p => p.Id.ToString(),但我希望它也能与System.Int32一起工作 -
@RobertFricke 这不是一种解决方法,它也会导致 NotSupportedException
-
@RobertFricke:如果您将其作为字符串排序,则从 1 到 12 的范围将是
1, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9,这不是您想要的。 -
代替 Func
尝试 Func -
@RandRandom,因为我试过了。
标签: c# linq entity-framework lambda