c#MVC按计数排序时未指定列名错误

时间:2016-11-28 23:11:17

标签: c# sql asp.net-mvc entity-framework

我在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中解决这个问题。谢谢你的帮助!

1 个答案:

答案 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订购。

由于我不知道您的数据是什么样的(特别是'查询'结果的样子),我只能猜测它应该如何工作。但希望有足够的信息来定制您的需求。