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 - 我明白你的觀點。它應該是一個約會。讓我試試這種方式。 –