2015-02-10 58 views
0

我有这种情况。按用户分组并显示每周的详细结果日

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

该模型是这样的:| Customer | 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的是展现由用户分组访问信息,显示计划去拜访客户在一定时期内每天。我需要表现出这样的信息:

Just like this

回答

1

我不知道这是否会反对,因为日期的东西直接在数据库工作,但这样的事情应该工作对一个内存中的集合:

// 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语句的最终结果。

+0

真棒。谢谢蒂姆,这解决了我的问题。我做的唯一的事情就是输入匿名类型,一切都像魅力一样。 – 2015-02-13 14:22:56

+0

如果我想统计所有访问过的客户,该怎么办?这将使匿名类型2中的每个'IENumerable Customers'COUNT ...我如何实现这一目标? – 2015-03-03 14:35:54

相关问题