簡體   English   中英

LINQ日期左外聯接不起作用

[英]LINQ left outer join on date not working

我有這個GroupedResult集合

IQueryable<GroupedResult> groupedResult = from p in db.Departure
group p by new { p.Terminal, p.DepartureDate, p.DepartureDate.Month } into g
select new GroupedResult
{
  terminal = g.Key.Terminal.Code,
  date = g.Key.DepartureDate,
  distance = g.Count(),
  month = g.Key.Month
};

問題是我得到的收藏缺少一些日期。 例如db.Departure包含2月1日,2月4日和6日。我還想顯示2月3日和5日的GroupedResult ,因此我使用以下代碼創建從特定開始日期開始的日期集合:

var dates = new List<DateTime>();

for (var dt = date; dt <= DateTime.Now; dt = dt.AddDays(1))
{
    dates.Add(dt);
}

然后使用groupedResult加入dates

var result = from p in groupedResult.ToList()
from q in dates.Where(r => r == p.date).DefaultIfEmpty()
select p;

我得到的結果與groupedResult的結果相同。 如何顯示沒有日期數據的條目?

這是因為您最終選擇了P .....您必須創建新的匿名類

var result = from q in dates
join p in groupedResult.ToList() on q equals p.date into joinedResult
from r in joinedResult.DefaultIfEmpty()
select new
{
terminal = r==null?null:r.terminal,
  date = q,
  distance = r==null?null:r.distance,
  month = r==null?null:r.month
};
var result = from p in groupedResult.ToList()
from q in dates.Where(r => r == p.date).DefaultIfEmpty()
select p;

您的左連接錯誤。 您正在從groupedResult選擇所有項目,然后要求LINQ獲取與groupedResult中已經存在的日期匹配的所有日期(如果沒有,則沒有一個)。

var result = from q in dates
             from p in groupedResult.Where(r => r.date == q).DefaultIfEmpty()
             select new { Date = q, Items = p };

之所以有效,是因為您選擇了所有日期,然后搜索匹配的分組項目。

暫無
暫無

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

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