Wpf LINQ to Entities合并了两个IQueryable<;匿名类型>;

Wpf LINQ to Entities合并了两个IQueryable<;匿名类型>;,wpf,entity-framework,linq-to-entities,Wpf,Entity Framework,Linq To Entities,我有两个问题可以解决: var q = (from c in _context.Wxlogs where (SqlFunctions.DatePart("Month", c.LogDate2) == m3) && (SqlFunctions.DatePart("Year", c.LogDate2) == y1) group c by c.LogDate2 into g

我有两个问题可以解决:

var  q = (from c in _context.Wxlogs

                where (SqlFunctions.DatePart("Month", c.LogDate2) == m3) && (SqlFunctions.DatePart("Year", c.LogDate2) == y1)
                group c by c.LogDate2
                into g
                orderby g.Key
                let maxTemp = g.Max(c => c.Temp)
                let minTemp = g.Min(c => c.Temp)
                let maxHum = g.Max(c => c.Humidity)
                let minHum = g.Min(c => c.Humidity)

                select new 
                           {
                               LogDate = g.Key,
                               MaxTemp = maxTemp,
                               MaxTempTime = g.FirstOrDefault(c => c.Temp == maxTemp).LogTime,
                               MinTemp = minTemp,
                               MinTempTime = g.FirstOrDefault(c => c.Temp == minTemp).LogTime,
                               MaxHum = maxHum,
                               MaxHumTime = g.FirstOrDefault(c => c.Humidity == maxHum).LogTime,
                               MinHum = minHum,
                               MinHumTime = g.FirstOrDefault(c => c.Humidity == minHum).LogTime,
                           });

var  r = (from c in _context.Wxlogs
                where
                    (SqlFunctions.DatePart("Month", c.LogDate2) == m3) &&
                    (SqlFunctions.DatePart("Year", c.LogDate2) == y1)
                group c by c.LogDate2
                    into g
                    orderby g.Key
                    let maxDew = g.Max(c => c.Dew_Point)
                    let minDew = g.Min(c => c.Dew_Point)
                    //let maxWind = g.Max(c=> c.Wind_Gust)
                    let maxRainRate = g.Max(c => c.Rain_rate_now)
                    let maxPres = g.Max(c => c.Barometer)
                    let minPres = g.Min(c => c.Barometer)

                    select new
                               {
                                   LogDate = g.Key,
                                   MaxRainRateTime = g.FirstOrDefault(c => c.Rain_rate_now == maxRainRate).LogTime,
                                   MaxPres = maxPres,
                                   MaxPresTime = g.FirstOrDefault(c => c.Barometer == maxPres).LogTime,
                                   MinPres = minPres,
                                   MinPresTime = g.FirstOrDefault(c => c.Barometer == minPres).LogTime,
                                   MinDew = minDew,
                                   MinDewTime = g.FirstOrDefault(c => c.Dew_Point == minDew).LogTime,
                                   MaxDew = maxDew,
                                   MaxDewTime = g.FirstOrDefault(c => c.Dew_Point == maxDew).LogTime,
                                   MaxRainRate = maxRainRate,

                               });
但是,当我尝试使用union组合它们时,为了将结果输出到WPF datgrid:

var result = r.Union(q);
在联合体上引发以下错误:

Error   1   Instance argument: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.ParallelQuery<AnonymousType#2>'
错误1实例参数:无法从'System.Linq.IQueryable'转换为'System.Linq.ParallelQuery'
我似乎找不到一种方法来实现这一点,任何帮助都将不胜感激。

一个“联合”操作将相同类型的两个序列组合成一个集合(即消除所有重复项)。因为显然有两种不同类型的序列,所以不需要联合操作。看起来您需要一个“concat”操作,它只是将两个序列链接在一起。你需要像这样的东西:

var result = r.Concat<object>(q);

由于联合操作在这里没有意义,您能确切地解释一下您希望从代码中得到什么吗?我最初将其作为一个长查询,通过ToList()将结果传递给WPF数据网格。但是,我不断地出现OutofMemory异常错误,直到查询被拆分。请在这里稍等。你真的想做一个
join
操作吗?我可能是:-)LINQ的新手。Had研究了Join,但认为这只是将表连接到一个查询中。如果您试图获得两个相邻查询的结果,则需要一个
连接
;如果希望这两个查询的结果位于数据网格的顶部和底部行集合中,则需要一个
concat
。谢谢。我试过Concat,但得到了与上述相同的错误。您的答案已编译,但在运行时抛出错误。Message=DbUnionAllExpression需要具有兼容集合结果类型的参数,这非常有用,不过我现在得到两个单独的列表,它们已合并。e、 我得到了两次日期,一次是第一组数据,一次是第二组数据。我们的目的是一次获得所有数据的日期。谢谢!这真是太棒了&工作得非常完美(只需交换一下rrow和qrow)。
var result = r.AsEnumerable().Concat<object>(q.AsEnumerable());
var result = from rrow in r.AsEnumerable()
             join qrow in q.AsEnumerable() on rrow.LogDate equals qrow.LogDate
             select new { rrow.LogDate,
                          rrow.MaxTemp, rrow.MaxTempTime,
                          rrow.MinTemp, rrow.MinTempTime,
                          rrow.MaxHum, rrow.MaxHumTime,
                          rrow.MinHum, rrow.MinHumTime,
                          qrow.MaxRainRate, qrow.MaxRainRateTime,
                          qrow.MaxPres, qrow.MaxPresTime,
                          qrow.MinPres, qrow.MinPresTime,
                          qrow.MaxDew, qrow.MaxDewTime,
                          qrow.MinDew, qrow.MinDewTime };