0
这是情况。使用LINQ执行GroupBy和Union获取记录
我想在使用LINQ的两个查询之间执行Union
。我使用匿名类型在两个查询中应用了GroupBy
。我不确切地知道,但可能匿名类型的使用导致我无法执行该联盟操作的这个问题。它显示了我的异常这样的:
“System.Linq.IQueryable”不包含 定义“联盟”和最佳推广方法重载 “System.Linq.ParallelEnumerable.Union(System.Linq的。 ParallelQuery, System.Collections.Generic.IEnumerable)”有一些无效 参数
下面是该查询:
var records = (from o in _context.Table1
join q in _context.Table2 on o.UserId equals q.UserId
group new { o, q }
by new { o.Name, o.Date, o.IsDone, o.IsDl, o.DateChanged, o.UserId, q.FirstName, q.LastName } into data
select new
{
NameP = data.Key.Name,
Date = data.Key.Date,
IsDone = data.Key.IsDone,
IsDl = data.Key.IsDl,
DateDone = data.Key.DateChanged,
Name = data.Key.FirstName +" "+ data.Key.LastName
}).Union(
from i in _context.Table1
where i.UserId == null
group i by new {o.Name, o.Date, o.IsDone, o.IsDl, o.DateChanged, o.UserId} into newData
select new
{
NameP = newData.Key.Name,
Date= newData.Key.Date,
IsDone = newData.Key.IsDone,
IsDl = newData.Key.IsDl,
DateDone = ' ',
Name = ' '
}).ToList();
我我试图在这里实现的是获得这两种情况的记录,当UserId
为空以及当它不为空时使用组,因为记录重复。
任何意见或指导,在这里我做错了赞赏。
确保两个匿名类型具有相同的数据类型,企业的性质所有..唯一的,我可以推测是日期的..也许第一个'DateDone'实际上是'DateTime'类型,并且您将第二个设置为'string' ... –
因为您使用的是匿名类型。尝试创建虚拟结果类并尝试。或者你可以尝试全外连接。 http://stackoverflow.com/questions/5489987/linq-full-outer-join –
@MichaelCoxon - 我明白你的观点。它应该是一个约会。让我试试这种方式。 –