我正在尝试使用LINQ从结果集创建一个匿名类型数组。
我的代码是
var data = (from s in sortedStudents
select new
{
//id = s.CurrencyId,
cell = new object[] { s.PropertyNumber.ToString(), s.Name,
s.Status.ToString(), "Hello" }
}).ToArray();
但是我收到如下错误,但我没有使用任何System.Int64变量。
无法将类型'System.Int64'强制转换为'System.Object'类型。 LINQ to Entities仅支持转换EDM原语或枚举类型。
这里有什么想法。
花了一些时间我怀疑我的数据排序逻辑是在创造问题,我的日期排序代码是
// Utility method to sort IQueryable given a field name as "string"
// May consider to put in a cental place to be shared
public IQueryable<T> SortIQueryable<T>(IQueryable<T> data, string fieldName, string sortOrder)
{
if (string.IsNullOrWhiteSpace(fieldName)) return data;
if (string.IsNullOrWhiteSpace(sortOrder)) return data;
var param = Expression.Parameter(typeof(T), "i");
Expression conversion = Expression.Convert(Expression.Property(param, fieldName), typeof(object));
var mySortExpression = Expression.Lambda<Func<T, object>>(conversion, param);
return (sortOrder == "desc") ? data.OrderByDescending(mySortExpression)
: data.OrderBy(mySortExpression);
}
现在,当我的类名为system.int64的列名时,它的创建问题,因为执行查询时实际发生在.ToArray结果。
答案 0 :(得分:0)
问题很可能在你的排序逻辑中,即这一行:
Expression conversion = Expression.Convert(Expression.Property(param, fieldName), typeof(object));
如错误消息所述,LINQ to Entities不支持此类转换。您需要事先使用.ToList()
执行查询,或重新制定排序逻辑。