Как сделать этот SQL-запрос в DotNet Core 2.1 Linq - PullRequest
0 голосов
/ 29 августа 2018

Вот T-SQL:

SELECT 
    'Total Tournaments' AS Name, COUNT(a.location) AS Value
FROM
    (SELECT location
     FROM [dbo].[TournamentBatchItem]
     GROUP BY TournamentName, location) a

UNION

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'

Вывод будет примерно таким:

Name                | Value
--------------------+-------
Indoor Tournaments  |   0
Outdoor Tournaments |   1
TotalTournaments    |   1

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете сделать это за одну поездку в базу данных:

var tournaments = _db.TournamentBatchItems
                  // Where clause is optional, needed only if you have others locations than indoor and outdoor 
                 .Where(t => t.Location == "Outdoor" || t.Location == "Indoor")
                 .GroupBy(t => t.Location)
                 .Select(t => new { Name = $"{ t.Key } Tournaments", Value = t.Count()})
                 .ToList();

tournaments.Add(new { Name = "Total Tournaments", Value = tournaments.Sum(t => t.Value)});
0 голосов
/ 29 августа 2018

Базовая будет такой:

var totalTournaments = (from tbi from _db.TournamentBatchItems select tbi.location).Count();
var whatever = (from tbi from _db.TournamentBatchItems where something==something select tbi.location).Count();

Затем составьте список вручную с помощью текстовых строк «Всего турниров». (Или используйте команду union), но я советую только запросить счетчик и ничего больше в запросе.

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