0

このコードを linq に変換したい:

select t1.title, COUNT(*)as num 
from t1 INNER join t2 on t2.gId = t1.Id 
group by t1.title, t1.cId 
having t1.cId = 2

以下のコードを試しました:

from p in db.t1s join r in db.t2s on p.Id equals r.gId 
where p.cId == 2 
group p by p.title into g 
select new{ name = from o in g select o.title, num = g.Count()}

しかし、これは COUNT を正しく返しません。

どうすれば問題を解決できるか教えてください

ありがとう

4

1 に答える 1

0

サンプルデータがないと正しく理解するのは難しいですが、このスニペットを試してみてください

from p in db.t1s 
join r in db.t2s on p.Id equals r.gId 
where p.cId == 2 
group p by new {p.title, p.cId} into grouped
select new{ name = grouped.Key.title, num = grouped.Count()}

また、次の sql に注意してください。

select t1.title, COUNT(*)as num 
from t1 INNER join t2 on t2.gId = t1.Id 
group by t1.title, t1.cId 
having t1.cId = 2

COUNT(*) の結果として常に 1 を返します。その理由は、t1.cId = 2 をフィルタリングし、2 番目のパラメーターとして t1.cId でグループ化しているためです。

于 2012-08-15T13:28:54.460 に答える