C#Linq Groupby和Where

C#Linq Groupby和Where,c#,sql,linq,C#,Sql,Linq,我有一个自定义列表,如下所示 class ActionToDo { public string Name {get;set;} public DateTime dtDate {get;set;} public string EventCode {get;set;} public string EventDescription {get;set;} } 我想做的是查找具有相同日期和相同事件描述的项目,以及EventCode=“AQ”的位置。我猜LINQ是实现这一目

我有一个自定义列表,如下所示

class ActionToDo
{
    public string Name {get;set;}
    public DateTime dtDate {get;set;}
    public string EventCode {get;set;}
    public string EventDescription {get;set;}
}
我想做的是查找具有相同日期和相同事件描述的项目,以及
EventCode=“AQ”
的位置。我猜LINQ是实现这一目标的最佳方法?我不知道如何使用
LINQ
实现这一点

在我的脑海中,使用
Sql
我认为大致如下

SELECT * FROM SomeTable
WHERE [EventDescription] = 'AQ'
GROUP BY [dtDate], [EventDescription]    

那么让我们假设你有一个

List<ActionToDo> actionToDo = new List<ActionToDo>();
actionToDo.Where(i => i.EventDescription == "AQ" && i.EventCode="AQ")
.GroupBy(i => new { i.dtDate.Date, i.EventDescription });
List actionToDo=new List();
actionToDo.Where(i=>i.EventDescription==“AQ”和&i.EventCode=“AQ”)
.GroupBy(i=>new{i.dtDate.Date,i.EventDescription});

那么让我们假设您有一个

List<ActionToDo> actionToDo = new List<ActionToDo>();
actionToDo.Where(i => i.EventDescription == "AQ" && i.EventCode="AQ")
.GroupBy(i => new { i.dtDate.Date, i.EventDescription });
List actionToDo=new List();
actionToDo.Where(i=>i.EventDescription==“AQ”和&i.EventCode=“AQ”)
.GroupBy(i=>new{i.dtDate.Date,i.EventDescription});

这里是一个LINQ查询,使用符合您需求的查询语法表达。此外,它还对分组属性
dtDate
EventDescription
进行排序,然后按
Name
对每个组的成员进行排序:

var actions = new List<ActionToDo>();
// populate 'actions'

var results =
    from a in actions
    where a.EventCode == "AQ"
    orderby a.dtDate, a.EventDescription, a.Name
    group a by new { a.dtDate, a.EventDescription };
演示计划

使用系统;
使用System.Collections.Generic;
使用System.Linq;
类GroupByDemo
{
静态公共void Main(字符串[]args)
{
var actions=新列表()
{
新行动TODO(“AQ.14b”、“2014-02-14”、“AQ”、“Desc.AQ.14”),
新行动待办事项(“AQ.12a”、“2014-02-12”、“AQ”、“Desc.AQ.12”),
新行动待办事项(“AQ.13b”、“2014-02-13”、“AQ”、“Desc.AQ.13”),
新行动待办事项(“XX.01”、“2014-02-01”、“XX”、“说明XX.01”),
新行动TODO(“AQ.14a”、“2014-02-14”、“AQ”、“Desc.AQ.14”),
新行动TODO(“AQ.12b”、“2014-02-12”、“AQ”、“Desc.AQ.12”),
新行动待办事项(“AQ.13a”、“2014-02-13”、“AQ”、“Desc.AQ.13”),
新行动待办事项(“XX.02”、“2014-02-02”、“XX”、“说明XX.02”),
新行动TODO(“AQ.13c”、“2014-02-13”、“AQ”、“Desc.AQ.13”),
新行动待办事项(“XX.03”、“2014-02-03”、“XX”、“说明XX.03”)
};
var结果=
从一个行动中的
其中a.EventCode==“AQ”
orderby a.dtDate、a.EventDescription、a.Name
按新{a.dtDate,a.EventDescription}分组a;
foreach(结果中的var组)
{
Console.WriteLine(“[{0}][{1}]”,
group.Key.dtDate.ToString(“yyyy-MM-dd”),
组。键。事件描述);
foreach(组中的var操作)
{
Console.WriteLine(“{0}”,action.Name);
}
}
}
}
类ActionToDo
{
公共字符串名称{get;set;}
公共日期时间dtDate{get;set;}
公共字符串事件代码{get;set;}
公共字符串EventDescription{get;set;}
公共行动待办事项(
字符串名,
字符串dtDateString,
字符串事件代码,
字符串(事件描述)
{
this.Name=Name;
this.dtDate=DateTime.Parse(dtDateString);
this.EventCode=EventCode;
this.EventDescription=EventDescription;
}
}

这里是一个LINQ查询,使用符合您需求的查询语法表达。此外,它还对分组属性
dtDate
EventDescription
进行排序,然后按
Name
对每个组的成员进行排序:

var actions = new List<ActionToDo>();
// populate 'actions'

var results =
    from a in actions
    where a.EventCode == "AQ"
    orderby a.dtDate, a.EventDescription, a.Name
    group a by new { a.dtDate, a.EventDescription };
演示计划

使用系统;
使用System.Collections.Generic;
使用System.Linq;
类GroupByDemo
{
静态公共void Main(字符串[]args)
{
var actions=新列表()
{
新行动TODO(“AQ.14b”、“2014-02-14”、“AQ”、“Desc.AQ.14”),
新行动待办事项(“AQ.12a”、“2014-02-12”、“AQ”、“Desc.AQ.12”),
新行动待办事项(“AQ.13b”、“2014-02-13”、“AQ”、“Desc.AQ.13”),
新行动待办事项(“XX.01”、“2014-02-01”、“XX”、“说明XX.01”),
新行动TODO(“AQ.14a”、“2014-02-14”、“AQ”、“Desc.AQ.14”),
新行动TODO(“AQ.12b”、“2014-02-12”、“AQ”、“Desc.AQ.12”),
新行动待办事项(“AQ.13a”、“2014-02-13”、“AQ”、“Desc.AQ.13”),
新行动待办事项(“XX.02”、“2014-02-02”、“XX”、“说明XX.02”),
新行动TODO(“AQ.13c”、“2014-02-13”、“AQ”、“Desc.AQ.13”),
新行动待办事项(“XX.03”、“2014-02-03”、“XX”、“说明XX.03”)
};
var结果=
从一个行动中的
其中a.EventCode==“AQ”
orderby a.dtDate、a.EventDescription、a.Name
按新{a.dtDate,a.EventDescription}分组a;
foreach(结果中的var组)
{
Console.WriteLine(“[{0}][{1}]”,
group.Key.dtDate.ToString(“yyyy-MM-dd”),
组。键。事件描述);
foreach(组中的var操作)
{
Console.WriteLine(“{0}”,action.Name);
}
}
}
}
类ActionToDo
{
公共字符串名称{get;set;}
公共日期时间dtDate{get;set;}
公共字符串事件代码{get;set;}
公共字符串EventDescription{get;set;}
公共行动待办事项(
字符串名,
字符串dtDateString,
字符串事件代码,
字符串(事件描述)
{
this.Name=Name;
this.dtDate=DateTime.Parse(dtDateString);
this.EventCode=EventCode;
this.EventDescription=EventDescription;
}
}