我在MVC中建立了一个拍卖网站。 _context
对象是我的DbContext。我以这种方式构建查询:
IQueryable<Auctions> query = _context.Auctions.Where(a => a.state ==
"active").Include(a => a.AuctionsUsersWatching).Include(a => a.bids);
(包括谁观看哪些拍卖和拍卖出价)
将结果返回到视图时,我想按特定列对它们进行排序。排序适用于拍卖的所有字段,但不适用于拍卖的出价计数:
case order_by_bidCount:
query = (order == "asc") ? query.OrderBy(c => c.bids.Count()).AsQueryable()
: query.OrderByDescending(c => c.bids.Count()).AsQueryable();
问题是,这部分代码给了我一个SqlException No column name was specified for column 1 of 'a'.
。这显然意味着SQL中缺少别名。我知道要在SQL中解决这个问题,但我想知道如何在MVC中解决这个问题。谢谢你的帮助!
答案 0 :(得分:0)
你可以使用group by而不是count吗?第一组按顺序排队?我不认为lambda中的.count()会转换为有效的SQL。
来自MSDN:
某些查询操作(如Count或Max)没有等效查询 表达式子句因此必须表示为方法调用。 方法语法可以通过各种方式与查询语法结合使用。
修改
我假设'查询'看起来像:
Auction ID Item Name Bid Id
Auction 4 "Red Car" bid5
Auction 4 "Red Car" bid2
Auction 4 "Red Car" bid1
Auction 3 "Stereo" bid3
Auction 7 "Watch" bid4
Auction 7 "Watch" bid6
所以你可以试试:
query.GroupBy(c => c.Auctions)
.Select (n => new
{
Auction = n.Key,
AuctionCount = n.Count()
}
)
.OrderBy(n => n.AuctionCount)
我想在这里尝试实现的是,group by将根据拍卖对项目进行分组,例如(假设拍卖是相同的,并且''查询'中的出价不同)
(Auction 4), [bid1, bid2, bid5]
(Auction 3), [bid3]
(Auction 7), [bid4, bid6]
Select会将这些组投影到类似
的新对象中**Auction** **AuctionCount**
Auction 4 3
Auction 3 1
Auction 7 2
然后我们可以通过AuctionCount订购。
由于我不知道您的数据是什么样的(特别是'查询'结果的样子),我只能猜测它应该如何工作。但希望有足够的信息来定制您的需求。