Заявление о ситуации в NHibernate / EF Linq - PullRequest
2 голосов
/ 13 сентября 2011

Что будет эквивалентно следующему оператору SQL в Linq?Я специально ищу, как заменить операторы CASE в выражении Linq.

SELECT a.app_id   AS Id, 
   a.app_nm   AS [Name], 
   COUNT(CASE 
           WHEN l.level_nm = 'ERROR' THEN l.log_id 
           ELSE NULL 
         END) AS Error, 
   COUNT(CASE 
           WHEN l.level_nm = 'FATAL' THEN l.log_id 
           ELSE NULL 
         END) AS Fatal 
FROM   info_log l 
     INNER JOIN application_info a 
     ON a.app_id = l.app_id 
WHERE  l.level_nm IN ( 'ERROR', 'FATAL' ) 
GROUP  BY a.app_id, 
          a.app_nm 

1 Ответ

3 голосов
/ 13 сентября 2011

Это должно помочь вам

var query = from l in context.info_log
            from a in context.application_info
            where l.app_id == a.app_id
            where l.level_nm == "ERROR" || l.level_nm == "FATAL"
            group l by new { a.app_id, a.app_nm } into lg
            select new
            {
              Id = lg.Key.app_id,
              Name = lg.Key.app_nm,
              Error = lg.Where(x => x.level_nm == "ERROR").Count(),
              Fatal = lg.Where(x => x.level_nm == "FATAL").Count(),
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...