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を実行するとクエリの実行が実際に行われるため、問題が発生します。