LINQ创建匿名类型数组错误

本文关键字:数组 错误 类型 创建 LINQ | 更新日期: 2023-09-27 17:54:11

我正在尝试使用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();

但是我得到一个错误如下,但我没有使用任何系统。Int64变量。

无法强制转换类型"System"。Int64'类型'System.Object'。LINQto 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的结果

LINQ创建匿名类型数组错误

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

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

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