无法将类型'System.Collections.Generic.IEnumerable <anonymoustype#1>'隐式转换为'System.Linq.IQueryable'</anonymoustype#1>

时间:2013-02-10 09:38:40

标签: linq

我想定义一个包含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行。

有什么问题?我怎么解决这个问题?请帮忙。

2 个答案:

答案 0 :(得分:1)

您的问题是致电AsEnumerable - 它会将IQueryable转换为IEnumerable;因此,您不能将其作为IQueryable返回。

如果我错了,请纠正我,但第二个选择似乎只是将行号添加到结果中。您可能希望与初始选择一起执行此操作,并跳过对AsEnumerable()的调用。

可能的解决方案:重写查询以不使用AsEnumerable(如果您想要返回IQueryable),或者您可以将返回类型更改为IEnumerable,如果这是更好的适合你的问题。

答案 1 :(得分:0)

返回查询;改变它以返回query.AsQueryable(); 并尝试更改方法签名以使用IQueryable而不是非通用的