0

我正在尝试使用 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 时,实际上会执行查询。

4

1 回答 1

0

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

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

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

于 2013-01-17T18:47:59.733 回答