这是我的问题Dynamic Expression Generation Issues with ValueTypes的后续添加一个新变量:实体框架。现在我能够在处理ValueType时生成必要的表达式,当Linq-to-Entities试图处理查询时,我遇到了一个新问题。我收到以下错误:使用Linq到实体的盒装值
System.NotSupportedException: Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
Linq-to-Entities显然不是盒装值的粉丝。当我强制查询进行处理时(通过ToList()
或其他类型的方法),但当数据库完成时,这是非常理想的。
有没有办法使这种方法更通用,使Linq-Entities快乐?请记住,我不知道属性的类型,直到运行时。
public IEnumerable<Expression<Func<T, object>>> GetExpressions<T>(string sortedColumn) where T : IReportRecord
{
var columns = GetFullSortOrder(sortedColumn);
var typeParameter = Expression.Parameter(typeof(T));
foreach (var c in columns)
{
var propParameter = Expression.Property(typeParameter, c);
if (propParameter.Type.IsValueType)
{
var boxedPropParameter = Expression.Convert(propParameter, typeof(object));
yield return Expression.Lambda<Func<T, object>>(boxedPropParameter, typeParameter);
}
else
{
yield return Expression.Lambda<Func<T, object>>(propParameter, typeParameter);
}
}
}
代替生成的'Expressions'您可以动态地直接申请您的订购到'IQueryable'这样的:http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet/233505#233505 – Aducci