按用户分组并显示每个工作日的详细结果

时间:2015-02-10 21:27:30

标签: c# linq

我有这种情况。

用户安排特定日期的客户访问。例如。: USER1将在DATE1上访问CUSTOMER1

模型是这样的:|客户| 1 --- * |访问|

相关模型是这样的:

public class Visit
{
   public int VisitID { get; set; }
   public int User { get; set; }
   public int DateScheduled { get; set; }
   public int CustomerID { get; set; }
}

我尝试使用LINQ而不是一堆列表和嵌套的ForEach是显示由USER分组的访问信息,显示计划在某一时间段内访问的客户。我需要显示这样的信息:

Just like this

1 个答案:

答案 0 :(得分:1)

我不知道这是否会因为Date内容而直接对数据库起作用,但是这样的东西应该对内存中的集合起作用:

// 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语句来说明你最终得到的粗略结构。