2011-09-13 14 views
2

LinqでのSQL文の後続と同等のものは何でしょうか?私は具体的にどのようにLinq式のCASE文を置き換えるかを考えています。NHibernate/EFの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 

答えて

3

これは

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(), 
      }; 
+0

おかげであなたを助ける必要があります。結合ステートメントを含むサンプルは、EFで正常に動作しますが、NHibernateでは動作しません。私はNHibernateでエラーと致命的に同じカウントを取得します。何か案が? – Raj

+0

@Raj - NHibernateがWhere句を無視しているようです。私はすぐにそれをテストすることはできません – Aducci