我有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);
}
然后将dates
加入groupedResult
var result = from p in groupedResult.ToList()
from q in dates.Where(r => r == p.date).DefaultIfEmpty()
select p;
我得到的结果与groupedResult
的结果相同。 如何显示没有日期数据的条目?
答案 0 :(得分:3)
这是因为你在最后选择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
};
答案 1 :(得分:2)
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 };
这样可行,因为您选择所有日期并搜索匹配的分组项目。