2015-02-10 32 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