У нас есть этот 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?
Спасибо