通过包含COUNT和GROUP BY的LINQ to SQL查询进行迭代

时间:2014-01-14 00:29:28

标签: c# linq linq-to-sql

我有一个事件注册页面,其中radiobuttonlist填充了事件日期,例如1月1日,2月1日,3月1日等。一旦有10个人注册了某个日期,我想禁用radiobuttonlist上的选项,以便它不能再被选中。

我是LINQ to SQL的新手,并且从直接SQL转换出一些问题。

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

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,并且参与者计数给了我一个计数,我只是不确定从这里到哪里去

  1. 通过查询迭代
  2. 检查计数是否>> 10
  3. 在文本中附加“full”,并为相应的radiobuttonlist项添加enabled = false。
  4. 现在,我被困住了。

    我想做一个简单的

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

    ...但我不确定如何将包含count的第一个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;
                }
            }
    

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上,但是为了拥有更可读的查询以及拥有可以帮助您决定显示或隐藏哪些单选按钮的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
            };