簡體   English   中英

如何將空組添加到Linq查詢結果集?

[英]How to add empty groups to a Linq query result set?

我有一個非常簡單的查詢,它根據匹配月份然后按天分組從表中選擇項目。 然后將這些組用作轉發器的數據源,該轉發器將組元素輸出為“每天”條目。

問題是那些不存在的日子(即沒有任何組合)將自然不會被顯示出來,所以第6和第8的東西,當第7天沒有任何東西時,將直接看到彼此(想想一個日歷視圖)。 問題是,根據我的查詢,我怎么能插入沒有元素的組,即使當天沒有條目?

IQueryable events = 
  Events
    .Where(i => i.Date.Month == date.Month)
    .GroupBy(i => i.Date.Day);

我可以在事后弄清楚這個,但我可以解釋它來立即得到結果集嗎? 或者可以推薦以前久經考驗的方法嗎?

像這樣創建結果集:

var date = ...;
var events = Enumerable.Range(1, DateTime.DaysInMonth(date.Year, date.Month))
    .ToDictionary(
        day => new DateTime(date.Year, date.Month, day),
        day => new List<Event>());

然后像這樣插入:

var query = Events
    .Where(e => e.Date.Year == date.Year)
    .Where(e => e.Date.Month == date.Month);

foreach (var e in query)
    events[e.Date].Add(e);

如果你真的想在服務器端做這個查詢的一部分,你需要(A)發送你感興趣的日期列表作為查詢的一部分,或者(B)使用DBMS特定的函數構建你對服務器端感興趣的日子。

具體到(B)和SQL,有這樣的事情: 獲取MySQL下個月的第一個和最后一個日期

我個人只會這樣做客戶端。 數據庫查詢獲取您的實現需要從數據庫中提取的任何數據; 用戶獲取您的視圖所需的任何信息。 要在數據庫中查詢創建視圖所需的數據,您實際上並不需要知道當月的日期列表,因此它實際上不應該是查詢的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM