我想定义一个包含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"。集合。通用的IEnumerable"到"系统。林克。IQueryable
在CCD_ 1线上。
问题出在哪里?我该如何解决这个问题?请帮忙。
您的问题是对AsEnumerable
的调用-它将IQueryable
转换为IEnumerable
;因此,不能将其作为IQueryable
返回。
如果我错了,请纠正我,但第二次选择似乎只会将行号添加到结果中。您还可以将此操作与初始选择一起执行,并跳过对AsEnumerable()
的调用。
可能的解决方案:将查询重写为不使用AsEnumerable
(如果您希望返回IQueryable
),或者您可以将返回类型更改为IEnumerable
,如果这更适合您的问题。
返回查询;将其更改为返回查询。AsQueryable();并尝试将方法签名更改为使用IQueryable,而不是非泛型的