少なくとも LINQ to SQL では、count 関数の欠点は、.count メソッドごとに個別の SQL 要求が必要になることです。Jessie は、述語ごとに複数のスキャンを実行するのではなく、テーブルに対して 1 回のスキャンを実行しようとしていると思われます。作成しているロジックと列の数によっては、これがうまく機能しない場合があります。元の要求に近づけて、(Northwind からの) 三項の if 句で sum を使用してみてください。
from e in Employees
group e by "" into g
select new {
isUs = g.Sum (x => x.Country == "USA" ? 1 : 0),
NotUs = g.Sum (x => x.Country != "USA" ? 0 : 1)
}
LINQ to SQL は次を生成します (他の ORM を使用した YMMV)。
SELECT SUM(
(CASE
WHEN [t1].[Country] = @p1 THEN @p2
ELSE @p3
END)) AS [isUs], SUM(
(CASE
WHEN [t1].[Country] <> @p4 THEN @p5
ELSE @p6
END)) AS [NotUs]
FROM (
SELECT @p0 AS [value], [t0].[Country]
FROM [Employees] AS [t0]
) AS [t1]
GROUP BY [t1].[value]