我有一个数据表,例如
ID Agent Date
1 A1 2016-02-19
2 A1 2016-02-20
3 A2 2016-02-19
4 A3 2016-02-20
我希望按日期对这些记录进行分组,并返回ID和代理列表,如:
Date:2016-02-19 ,{(1,A1),(3,A2)}
Date:2016-02-20 ,{(2,A1),(4,A3)}
ID和代理Group by Date的集合对象。 请使用LINQ建议如何实现它。
答案 0 :(得分:1)
我认为像下面这样的东西会做你想要的。
var result = datatable.AsEnumerable()
.GroupBy(row=>row.Field<DateTime>("Date"))
.Select(gr=>new
{
Date = gr.Key,
Agents = gr.Select(x => new
{
Id = x.Field<int>("ID"),
Agent = x.Field<string>("Agent")
})
});
<强>更新强>
如果您需要每个日期,代理商可以是逗号分隔的代理商列表,
像这样{(2,A1),(4,A3)}
,您可以尝试以下方法。
var result = datatable.AsEnumerable()
.GroupBy(row=>row.Field<DateTime>("Date"))
.Select(gr=>new
{
Date = gr.Key,
Agents = "{"+ string.Join(",",
gr.Select(x => new
string.Format("({0},{1})",
x.Field<int>("ID"),
x.Field<string>("Agent"))+"}"
})
});
答案 1 :(得分:0)
这是我的示例类:
public class Log
{
public int ID { get; set; }
public string Agent { get; set; }
public DateTime Date { get; set; }
public Log(int id, string agent, DateTime date)
{
ID = id;
Agent = agent;
Date = date;
}
}
这里是带有一些测试数据的LINQ语句:
List<Log> list = new List<Log>()
{
new Log(1, "A", new DateTime(2016, 01, 01, 0, 0, 0)),
new Log(2, "B", new DateTime(2016, 01, 01, 0, 0, 0)),
new Log(3, "C", new DateTime(2016, 01, 01, 0, 0, 0)),
new Log(4, "A", new DateTime(2016, 01, 02, 0, 0, 0)),
new Log(5, "A", new DateTime(2016, 01, 03, 0, 0, 0))
};
var result = from entry in list
group entry by entry.Date
into g
select g;
这会将您的所有数据分组到基于Log.Date
的 Key 组,其中每个组都包含多个条目,每个条目都有ID
,{{1} }和Agent
属性。
这里有一些示例代码如何访问Date
:
result