Выполнение GroupBy и Union с использованием LINQ для извлечения записей
Вот ситуация.
Я пытаюсь выполнить Union
между двумя запросами с использованием LINQ. Я применил GroupBy
в обоих запросах, используя анонимные типы. Я не знаю точно, но, вероятно, использование анонимного типа приводит меня к этой проблеме, когда я не могу выполнить эту операцию Union. Это показывает мне исключение, как это:
System.Linq.IQueryable не содержит определения для Union и лучшей перегрузки метода расширения. 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
имеет значение null, а также когда его значение не равно null при использовании group by, поскольку записи повторяются.
Любые предложения или указания о том, что я делаю неправильно, приветствуются.
1 ответ
Убедитесь, что два анонимных типа имеют одинаковый тип данных для всех объектов.
Единственные, о которых я могу спекулировать, это даты. Может быть первый DateDone
на самом деле DateTime
типа, и вы устанавливаете второй в string
...
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 = new DateTime(0),
Name = ' '
}).ToList();