Проблема с множественным выбором в запросе метода LINQ - PullRequest
0 голосов
/ 01 сентября 2018

У нас есть этот TSQL:

SELECT 'Outdoor Tournaments' AS Name, COUNT(a.location) AS Value
FROM
(select location
from [dbo].[TournamentBatchItem]
GROUP BY TournamentName, location) a
WHERE a.location = 'Outdoor'

UNION

SELECT 'Indoor Tournaments' AS Name, COUNT(a.location) AS Value
FROM
(select location
from [dbo].[TournamentBatchItem]
GROUP BY TournamentName, location) a
WHERE a.location = 'Indoor'

Исходное решение для метода LINQ:

var tournamentStats1 = await _context.TournamentBatchItem.Where(t => t.Location == "Outdoor" || t.Location == "Indoor")
                          .GroupBy(t => t.Location)                                        
                          .Select(t => new { Name = t.Key, Value = t.Location})
                          .ToListAsync();

Затем мы понимаем, что это неправильно, и мы изменили это и протестировали приложение LinqPAD и работали нормально:

var tournamentStats1 = await _context.TournamentBatchItem.Where(t => t.Location == "Outdoor" || t.Location == "Indoor")
                          .GroupBy(t => new { t.TournamentName, t.Location })
                          .Select(t => new { Name = t.Key.TournamentName, Value = t.Key.Location })
                          .GroupBy(a => a.Value)
                          .Select(a => new Stat { Name = a.Key, Value=a.Count() })
                          .ToList();

Однако, когда мы помещаем в веб-приложение .Net Core 2.1 и у нас есть это «System.ArgumentException: должен быть приводимым узлом», и это выглядит как-то связанное с вложенным Select, поэтому мы изменили это на ниже, разделив запрос. Этот работал хорошо.

var tournamentStats1 = await _context.TournamentBatchItem.Where(t => t.Location == "Outdoor" || t.Location == "Indoor")
                                    .GroupBy(t => new { t.TournamentName, t.Location })
                                    .Select(t => new { Name = t.Key.TournamentName, Value = t.Key.Location })
                                    .ToListAsync();


            var tournamentStats = tournamentStats1.GroupBy(a => a.Value)
                                    .Select(a => new Stat { Name = a.Key, Value=a.Count() })
                                    .ToList();

Это ошибка? У кого-нибудь есть опыт работы с этой версией 2.1?

Спасибо

...