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));

エラーメッセージに示されているように、LINQtoEntitiesはこのタイプの変換をサポートしていません。事前に.ToList()またはを使用してクエリを実行するか、並べ替えロジックを再定式化する必要があります。

于 2013-01-17T18:47:59.733 に答える