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);

如您所见,我正在按 进行 aLEFT 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

仍然会有一条记录,即使它为空 - 包含“NULL”的集合仍然是一行 - 这就是为什么它说有 1 条记录。如果您为该Count方法提供要计算哪些记录的参数,它应该会更好地工作。

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

你把事情弄得太复杂了。 join...into执行group joinCustomerId ,因此 Orders在您的前两行代码中分组。这应该有效:

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 回答