0

誰かが次のSQLをC#でlinqに変換するのを手伝ってくれませんか?

select s.SYSTEM_NAME,
       r.RESET_CODE,
       COUNT(v.reset_code) 
  from (select distinct system_name 
          from tbl) s 
cross join (select distinct reset_code 
              from tbl) r 
left join tbl v on v.SYSTEM_NAME = s.SYSTEM_NAME 
               and v.RESET_CODE=r.RESET_CODE 
 group by s.SYSTEM_NAME,r.RESET_CODE 
4

1 に答える 1

2

クロス結合は、通常、クエリ式の複数の from 句、または拡張メソッド構文の SelectMany の呼び出しとして表されます。

したがって、クエリの最初の部分は次のようになります。

var query = from systemName in db.Table.Select(x => x.SystemName).Distinct()
            from resetCode in db.Table.Select(x => x.ResetCode).Distinct()
            ...

左外部結合は、通常、次のように、"join ... into ..." クエリで表されます。

var query = from systemName in db.Table.Select(x => x.SystemName).Distinct()
            from resetCode in db.Table.Select(x => x.ResetCode).Distinct()
            join tmp in db.Table on 
                new { ResetCode = resetCode, SystemName = systemName } 
                equals new { tmp.ResetCode, tmp.SystemName }
                into tmpGroup
            select new { ResetCode = resetCode,
                         SystemName = systemName,
                         Count = tmpGroup.Count() };

正直なところ、カウントの部分についてはよくわかりません...COUNT(v.ResetCode)元のSQLで何をするのか100%わかりません。

于 2011-01-17T17:13:54.480 に答える