遍历包含COUNT和GROUP BY的LINQ到SQL查询



我有一个事件注册页面,其中的单选按钮列表中填充了事件日期,如1月1日、2月1日和3月1日等。一旦有10个人注册了一个日期,我想禁用单选按钮列表上的选项,这样就不能再选择它了。

我是LINQ to SQL的新手,在从纯SQL进行翻译时遇到了一些问题。

我有一个带有EventID和EventDateID的表Events。数据看起来像

EventID | EventDateID
1       | 1
2       | 1
3       | 1
4       | 3
5       | 3
6       | 5

我有下面的SQL,它准确地返回我要查找的内容,EventID和eventDateID的出现次数。

SELECT eventDateID, COUNT(eventDateID) AS COUNT
FROM EVENTS
GROUP BY eventDateID
Output:
EventID | EventDateID
1       | 3
3       | 2
5       | 1

到目前为止,这就是我提出的LINQ:

DataClassesDataContext db = new DataClassesDataContext();
var query = db.Events
.GroupBy(ev => new
{
ev.EventDateID
})
.Select(g => new
{
g.Key.EventDateID,
attendeeCount = g.Count()
});    

g.Key.EventID给了我要找的ID,而attendeeCount给了我计数,我只是不确定从这里到该去哪里

  1. 遍历查询
  2. 检查计数是否>=10
  3. 将"full"附加到文本,并为相应的单选按钮列表项启用=false

现在,我被卡住了。

我想做一个简单的

foreach (var i in query)
{
//check the count
//do the other stuff
}

但我不确定如何将包含计数的第一个LINQ查询中的信息与foreach循环集成。

(如果这是一种完全愚蠢的方式,我会100%接受建议)。

谢谢。

编辑以反映@AjaySingh的回答

DataClassesDataContext db = new DataClassesDataContext();
var query = from ev in db.Events
group ev by ev.EventDateID into grp
select new
{
EventDateID = grp.Key,
Count = grp.Count(),
IsFull = grp.Count() >= 10
};
foreach (var i in query)
{
if (i.IsFull)
{
rdoDates.Items.FindByValue(i.EventDateID.ToString()).Text += " - Full";
rdoDates.Items.FindByValue(i.EventDateID.ToString()).Enabled = false;
}
}

我认为你走在了正确的轨道上,但为了有更可读的查询,以及有一个可以帮助你决定显示或隐藏哪些单选按钮的bool,你可以尝试以下linq:

var query = from ev in db.Events
group ev by ev.EventDateID into grp
select new 
{
EventDateID = grp.Key,
Count = grp.Count(),
IsFull = grp.Count() >= 10
};

最新更新