0

LINQToSQL を使用して C# プロジェクトに取り組んでいますが、現在、次のクエリに問題があります。

var groupByQuery =  (from c in db.Customers
                            join o in db.Orders on c.CustomerID equals o.CustomerID into lf1
                            from or in lf1.DefaultIfEmpty()
                            group c by c.CustomerID into g
                            select new
                            {
                                CustomerID = g.Key,
                                Count = g.Count()
                            }
                            ).OrderBy(x => x.Count);

ご覧のとおり、LEFT OUTER JOINと でグループ化していCustomerIDますが、これまでのところすべてうまくいっています。しかし、結果を見ると、Customersを持たないOrderのフィールドに「1」があることがわかりCountます。

何故ですか?これらのCount場合、フィールドには「0」が含まれているはずです。何が間違っていますか?

ここでこの質問を見つけました:

linq-count-query-returns-a-1-instead-of-a-0

linq-to-sql-joining-query-returning-1-instead-of-0

しかし、どれも私には役に立ちませんでした。誰かが助けてくれることを願っています。よろしくお願いします。

4

2 に答える 2

1

あなたは物事を複雑にしすぎています。 group joinjoin...intoを実行するため、最初の 2 行のコード内でOrders がグループ化されます。これはうまくいくはずです:CustomerId

var groupByQuery =  (from c in db.Customers
                     join o in db.Orders on c.CustomerID equals o.CustomerID into lf1
                     select new
                     {
                         CustomerID = c.Id,
                         Count = lf1.Count()
                     }
                     ).OrderBy(x => x.Count);
于 2012-09-25T01:19:40.087 に答える
1

null であってもレコードは存在します - 「NULL」を含むセットはまだ行です - そのため、1 つのレコードがあると言っています。Countカウントするレコードの引数をメソッドに与えると、より適切に機能するはずです。

Count = g.Count(a => a.SomeNullableField != null)
于 2012-09-24T22:35:23.140 に答える