2014-10-27 31 views
2

我有一些實例需要返回使用.GroupBy的數據列表。除了日期和整數之外,我還需要返回布爾值,這似乎無法完成。一個例子模型:帶有布爾值的lambda查詢分組

public class HolidayCheckList 
{ 
    public DateTime startDate { get; set; } 
    public DateTime endDate { get; set; } 
    public int stafferId { get; set; } 
    public bool startTime { get; set; } 
    public bool endTime { get; set; } 
} 

下面是控制器是目前:

var model = _db.AnnualLeaves 
    .Where(r => r.StartDate <= tTE && r.EndDate >= tTS) 
    .GroupBy(r => r.tBooked) 
    .Select(m => new HolidayCheckList 
    { 
     startDate = m.Max(r => r.StartDate), 
     endDate = m.Max(r => r.EndDate), 
     stafferId = m.Min(r => r.StafferId) 
    }); 

    return View(model.ToList()); 

這做什麼,我需要的。但是,除了startDateendDate我需要將startTimeendTime(它們是布爾值)返回給視圖。我不知道我是否需要一個我不知道的聚合運算符,需要包含在.GroupBy語句中,或者可能需要嵌套查詢。毫無疑問,這將是更簡單的事情。

我曾考慮將數據類型更改爲一個整數,但想知道是否有方法「正確地」執行此操作。

另一方面,是否有lambda查詢的學習資源或文檔?我可以找到基本信息,但沒有詳細說明.GroupBy是如何工作的,或者是什麼聚合運算符。

+0

答案(您想要使用聚合還是在「GroupBy」lambda中包含屬性)取決於這些屬性中的不同值是否表示不同的組。換句話說,如果兩個'HolidayChecklist'除了'startTime'和'endTime'都相同,它們是否應該組合在一起? – 2014-10-27 17:57:27

+0

如果數據寫入表中,我可以確保startTime和endTime值對於任何組都是相同的,儘管我更喜歡使用諸如Min/Max之類的聚合。 – PawnSacrifice 2014-10-27 18:05:59

回答

0

如果你確定所有startTimeendTime值將是相同的(或者你不關心),你可以使用.First選擇在該組的startTimeendTime值的第一項:

var model = _db.AnnualLeaves 
    .Where(r => r.StartDate <= tTE && r.EndDate >= tTS) 
    .GroupBy(r => r.tBooked) 
    .Select(m => new HolidayCheckList 
    { 
     startDate = m.Max(r => r.StartDate), 
     endDate = m.Max(r => r.EndDate), 
     stafferId = m.Min(r => r.StafferId), 
     startTime = m.Select(r => r.StartTime).First(), 
     endTime = m.Select(r => r.EndTime).First() 
    }); 

lambdas的一個很好的資源是MSDN上的Lambda Expressions文章。

Aggregation Operations看起來像是LINQ中可用的各種集合操作的很好概述。不幸的是,這些例子在VB.NET中。

+0

這看起來像票...我會盡快測試它 - 我嘗試使用.First和.Last,但將它放在錯誤的位置,即.Select位於上面的代碼中。對我來說,它應該與startTime.First和endTime .Last一起工作。 我太親近了!謝謝。 – PawnSacrifice 2014-10-27 18:13:52

+0

使用上面我得到了以下內容,與FirstOrDefault交換了固定的內容...... + $ exception \t {「方法'First'只能用作最終查詢操作,請考慮在此實例中使用方法'FirstOrDefault' 「} \t System.Exception {System.NotSupportedException} 謝謝,你讓我過度了!哦,還有鏈接。 – PawnSacrifice 2014-10-27 19:26:35