LINQ Не содержит определения для 'union' - PullRequest
0 голосов
/ 12 ноября 2018

что не так с этим запросом linq, который показывает мне ошибку Не содержит определения для 'union'

(from rev in db.vM29s
                              where Years.Contains(rev.FinancialYear) && rev.Exclude=="No"
                              group rev by new { rev.RevenueCode, rev.FinancialYear } into g
                              select new
                              {
                                  Revenuecode = g.Key.RevenueCode,
                                  totalRevenue = g.Sum(x => x.RevenueAmount),
                                  RevenueEnglish = (from a in db.RevenueCodes where a._RevenueCode == g.Key.RevenueCode select a.RevenueEng).FirstOrDefault(),
                                  //  MinorCode = (from a in db.MinorCodes where a._MinorCode == g.Key.MinorCode select a.MinorEng),
                                  RevenueDari = (from a in db.RevenueCodes where a._RevenueCode == g.Key.RevenueCode select a.RevenueDari).FirstOrDefault(),
                                  Yearss = g.Key.FinancialYear
                              }).Union(from u in db.rtastable
                                       where Years.Contains(u.Year)
                                       group u by new { u.objectcode, u.Year } into g
                              select new
                              {
                                  Revenuecode = g.Key.objectcode,
                                  totalRevenue = g.Sum(x => x.amount),
                                  RevenueEnglish = (from a in db.RevenueCodes where a._RevenueCode == g.Key.objectcode select a.RevenueEng).FirstOrDefault(),
                                  //  MinorCode = (from a in db.MinorCodes where a._MinorCode == g.Key.MinorCode select a.MinorEng),
                                  RevenueDari = (from a in db.RevenueCodes where a._RevenueCode == g.Key.objectcode select a.RevenueDari).FirstOrDefault(),
                                  Yearss = g.Key.Year
                              }).ToList();

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если вы включили using System.Linq; и , оба анонимных типа имеют точно одинаковые имена свойств + типы свойств, то то, что вы сделали, должно работать.

Все же это не работает. Решение состоит в том, чтобы проверить свои анонимные типы на (а) незначительные различия в именах свойств и (b) незначительные различия в типах свойств .

например. даже int против smallint или double или decimal вызовет эту ошибку сборки:

'System.Collections.Generic.IEnumerable' не содержит определения для 'Union' и лучшей перегрузки метода расширения 'System.Linq.Queryable.Union (System.Linq.IQueryable, System.Collections.Generic.IEnumerable) 'имеет недопустимые аргументы

Переключение на .Concat() не исправит это: оно имеет такое же (очевидное) ограничение, что типы с обеих сторон должны быть совместимы.

После того, как вы исправите проблему с именами или набором текста, я бы порекомендовал вам перейти на .Concat(). Причина: .Union() будет вызывать .Equals() для всех объектов для устранения дубликатов, но это бессмысленно, потому что никакие два Анонимных Объекта, которые были созданы независимо, никогда не будут одним и тем же объектом (даже если их содержимое будет одинаковым).

Или, если вы хотели исключить дубликаты, вам нужно создать класс, содержащий ваши данные и реализующий .Equals() способом, который имеет смысл.

0 голосов
/ 12 ноября 2018

Вы должны использовать Concat или addRange , если данные уже находятся в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...