Условная сумма в LINQ

что представляет собой запрос linq из этого SQL-запроса

SELECT 
      sum(IIF(jenis = 'primer',1,0)) as sum_primer, 
      sum(IIF(jenis = 'sekunder',1,0)) as sum_sekunder
FROM cooperations

Попробуйте найти тот же пример из 101 образцов Linq, но не понял

UPDATE So, I using this query in my C#

var query = (from c in db_cooperations.cooperations
              group c by c.jenis into g
              select
              (new
              {
                sum_primer = g.Count(c => c.jenis == "primer"),
                sum_sekunder = g.Count(c => c.jenis == "sekunder")
              })).ToArray();

Выходные данные

 sum_primer   sum_sekunder
    0             0 
    0             52
   250            0
    0             0
    0             0

Итак, как я мог удалить нулевое значение и просто вернуть одну строку

2
nl ja de

2 ответы

вы можете достичь этого, как показано ниже, после этого вы можете подсчитать количество предметов согласно условию

var data = db.CoOperations.
           GroupBy(x=>x.jenis )
           .select (new {
                sum_primer = g.Count(c => c.jenis == "primer"),
                sum_sekunder = g.Count(c => c.jenis == "sekunder"),
            });
5
добавлено
Это простая группировка, которая вернет sum_primer и sum_sekunder для каждого значения jenis .
добавлено автор Sergey Berezovskiy, источник
спасибо @Pranay, можно проверить мои обновления
добавлено автор l1th1um, источник
var sum_primer = cooperations.Count(c => c.jenis == "primer");
var sum_secunder = cooperations.Count(c => c.jenis == "sekunder");

Или в одном запросе к базе данных

var query = (from c in cooperations
             where c.jenis == "primer" || c.jenis == "sekunder"
             group c by c.jenis
             select new { Jenis = g.Key, Count = g.Count() }
            ).ToDictionary(x => x.Jenis, x => x.Count);

var result = new {
   sum_primer = query.ContainsKey("primer") ? query["primer"] : 0,
   sum_sekunder = query.ContainsKey("sekunder") ? query["sekunder"] : 0
};

Этот SQL будет сгенерирован (и будут возвращены только две строки):

SELECT COUNT(*) AS [Count], [t0].[jenis] AS [Jenis]
FROM [cooperations] AS [t0]
WHERE ([t0].[jenis] = 'sekunder') OR ([t0].[jenis] = 'primer')
GROUP BY [t0].[jenis]
5
добавлено
@ l1th1um, если вы имеете в виду 10 условий для jenis , тогда фактически выполненный запрос будет только один (см. обновление)
добавлено автор Sergey Berezovskiy, источник
Ваш запрос возвращает правильное значение, но поскольку у меня есть 10 условий, значит ли это, я должен сделать 10 запросов? Спасибо
добавлено автор l1th1um, источник
Хорошо ... отлично Это работает: D
добавлено автор l1th1um, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot