0

次のようにLinqクエリを含む関数を定義したい:

public IQueryable GetBasket(Guid userId)
{
    DabbaghanDataContext db = new DabbaghanDataContext();

    int rowNo = 0;
    var query = (from c in db.Carts
                 join co in db.CartOrders on c.Id equals co.Cart_Id
                 join p in db.Products on co.Product_Id equals p.Id
                 where c.UserId == userId && c.Issued == false
                 select new
                 {
                     co.Quantity,
                     co.TotalPrice,
                     p.Code,
                     p.Price,
                     p.Thumbnail
                 }).AsEnumerable().Select(r => new
                 {
                     RowNumber = ++rowNo,
                     Quantity = r.Quantity,
                     TotalPrice = r.TotalPrice,
                     Code = r.Code,
                     Price = r.Price,
                     Thumbnail = r.Thumbnail
                 });

    return query;
}

エラーが発生します

タイプ 'System.Collections.Generic.IEnumerable' を 'System.Linq.IQueryable' に暗黙的に変換することはできません。

ライン上return query

何が問題ですか?どうすればこの問題を解決できますか? 助けてください。

4

2 に答える 2

1

あなたの問題はへの呼び出しです AsEnumerable- それはに変換しIQueryableますIEnumerable; したがって、 として返すことはできませんIQueryable

間違っている場合は修正してください。ただし、2 番目の選択では結果に行番号が追加されるだけのようです。最初の選択と一緒にそれを行い、への呼び出しをスキップすることもできますAsEnumerable()

考えられる解決策: 使用しないようにクエリを書き直すAsEnumerableか (返される値が必要な場合)、問題により適している場合はIQueryable、戻り値の型を に変更できます。IEnumerable

于 2013-02-10T09:41:28.847 に答える
0

リターンクエリ; これを変更してquery.AsQueryable();を返します。また、一般的でないものの代わりにIQueryableを使用するようにメソッドシグネチャを変更してみてください

于 2013-02-10T16:01:18.007 に答える