ここで、Linq2Sqlを使用してテーブルを結合し、リンクされたレコードの量をカウントする方法を見つけました。LINQ-左結合、Group By、およびカウント
私はそれを実装しました、そしてそれは私にとってうまくいきます:次の式
var v = from c in db.GetTable<Country>()
join t0 in db.GetTable<Team>() on c.Id equals t0.CountryId into t1
from team in t1.DefaultIfEmpty()
group team by c.Id into teamsGrouped
select new CountryTeamsInfo
{
CountryId = teamsGrouped.Key,
TeamsTotal = teamsGrouped.Count(),
// TeamsWithoutOwnerFree = teamsGrouped.Count(t => t.OwnerId==0)
}
;
List<CountryTeamsInfo> res = v.ToList();
次のクエリを生成します。
SELECT c.Id, Count(*) as c1
FROM countries c
LEFT JOIN teams t1 ON c.Id = t1.Country
GROUP BY c.Id
実際、OwnerIdフィールドが0に等しくないリンカーレコードもカウントする必要があります。
linq式(TeamsWithoutOwnerFree = teamGrouped.Count(t => t.OwnerId == 0))のその行のコメントを解除する必要があるようですが、それは機能しません。実行しようとすると、エラーが発生します。
指定されたキーが辞書に存在しませんでした
クエリがSQLログファイルに届かず、デバッガーで調べることができません。
追加の基準を満たす「チーム」テーブルからこれらの行をカウントする適切な方法は何でしょうか。
PS重要な場合は、C#4.0、MySql 5.1、BLToolkit4.1を使用します