這是我的問題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