1

フィルターを適用してからコレクションを並べ替える次のリポジトリ メソッドがあります。

  public IQueryable<TE> SelectAll(Expression<Func<TE, bool>> predicate, 
            Expression<Func<TE, object>> sortExpression, bool orderDescending = false)
        {
            var list = _ctx.CreateQuery<TE>("[" + typeof(TE).Name + "]")
                .AsExpandable().Where(predicate);

            return orderDescending 
                ? list.OrderByDescending(sortExpression) 
                : list.OrderBy(sortExpression);
        }

where 述語は正常に機能しますが、OrderBy が適用されると、次のエラーが発生します。

タイプ 'System.Int32' をタイプ 'System.Object' にキャストできません。LINQ to Entities は、EDM プリミティブ型または列挙型のキャストのみをサポートします。

編集:これは呼び出しコードです:

 var documentos = SelectAll(d => serviciosId.Contains(d.ServicioId) && d.TipoSociedadId == tipoSociedadId, d => d.Grupo);
4

1 に答える 1

1

これを試して:

public IQueryable<TE> SelectAll<TE, TKey>(Expression<Func<TE, bool>> predicate, 
            Expression<Func<TE, TKey>> sortExpression, bool orderDescending = false)
{
    var list = _ctx.CreateQuery<TE>("[" + typeof(TE).Name + "]")
                   .AsExpandable().Where(predicate);

    return orderDescending 
        ? list.OrderByDescending(sortExpression) 
        : list.OrderBy(sortExpression);
}

Func問題は、OrderBy句内の の 2 番目のパラメーターがobjectコード内にあり、それを に渡しint、それを にキャストしようとするintことですobject。上に貼り付けたコードには、順序付け関数の任意の型を渡すことができる追加のジェネリック パラメーターがあるため、これは機能するはずです。

于 2013-03-18T21:19:45.963 に答える