C# LINQ在日期离开外部联接不工作

C# LINQ在日期离开外部联接不工作,c#,linq,C#,Linq,我有这个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.Departur

我有这个
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
};
var result = from p in groupedResult.ToList()
from q in dates.Where(r => r == p.date).DefaultIfEmpty()
select p;
然后将
dates
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
};
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
};

这是因为您在最后选择了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
};
你把左路接错了。您正在从
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 };
这是可行的,因为您选择所有日期并搜索匹配的分组项目

你把左路接错了。您正在从
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 };

这很有效,因为您选择了所有日期并搜索匹配的分组项目。

因为您正在执行select pI,所以认为您必须创建新的匿名类因为您正在执行select pI,所以认为您必须使用此方法创建新的匿名类,我仍然得到相同的结果。我认为此语法有问题日期…是的,我看到了,但错误显示
无效的表达式术语“from”
join from q in dates
是有效的语法吗?也更正了…有额外的form子句…我没有测试它,所以可能有语法错误…但是你的代码应该是这样的…请告诉我它是否有效…否则给我一些时间,我会测试它并给你正确的代码
q
无法访问在
date=q.date
中,我使用了
p.date
。仍然是相同的结果。使用此方法,我仍然得到相同的结果。我认为此语法有问题。
join from q in dates…
是的,我看到了,但错误显示
无效的表达式术语“from”
join from q in dates
是有效的语法吗?也更正了…有额外的form子句…我没有测试它,所以可能有语法错误…但是你的代码应该是这样的…请告诉我它是否有效…否则给我一些时间,我会测试它并给你正确的代码
q
无法访问在
date=q.date
中,我使用了
p.date
。不过,结果还是一样,我明白了。但是我在运行这个之后得到了函数评估超时。我明白了。但是我在运行这个之后得到了函数评估超时。