我不知道这是否会反对,因为日期的东西直接在数据库工作,但这样的事情应该工作对一个内存中的集合:
// Assuming Visits is an IEnumerable<Visit>
var userVisits = from v in Visits
group v by v.User into groupedVisits
select new { // AnonymousType1
User = groupedVisits.Key,
Visits = from gv in groupedVisits
group gv by gv.DateScheduled.Date into dateVisits
select new { // AnonymousType2
DateScheduled = dateVisits.Key,
Customers = from dv in dateVisits
select dv.CustomerId
}
}
这将使你,实质上包含以下结构:
class AnonymousType1
{
public int User { get; set; }
public IEnumerable<AnonymousType2> { get; set; }
}
class AnonymousType2
{
public DateTime DateScheduled { get; set; }
public IEnumerable<int> Customers { get; set; }
}
和userVisits
会一个IEnumerable<AnonymousType1>
我不知道你将如何避免使用一些嵌套的foreach
语句来实际显示数据。但是这应该以一种容易实现的格式给你提供数据。
注意:我认为上面提到的IEnumerable<>
类型中的一些可能实际上是IQueryable<>
或类似的。但这是伪代码,只是为了说明使用类似于上面的LINQ语句的最终结果。
来源
2015-02-10 21:42:46
Tim
真棒。谢谢蒂姆,这解决了我的问题。我做的唯一的事情就是输入匿名类型,一切都像魅力一样。 – 2015-02-13 14:22:56
如果我想统计所有访问过的客户,该怎么办?这将使匿名类型2中的每个'IENumerable Customers'COUNT ...我如何实现这一目标? –
2015-03-03 14:35:54