LINQ创建匿名类型数组错误

时间:2013-01-17 17:34:05

标签: c# linq sorting anonymous-types

我正在尝试使用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结果。

1 个答案:

答案 0 :(得分:0)

问题很可能在你的排序逻辑中,即这一行:

Expression conversion = Expression.Convert(Expression.Property(param, fieldName), typeof(object));

如错误消息所述,LINQ to Entities不支持此类转换。您需要事先使用.ToList()执行查询,或重新制定排序逻辑。