正确的方法使用Group by查询DataContext,该方法的字段为Null

时间:2019-07-09 15:10:29

标签: c# linq entity-framework-6 linq-to-entities linq-expressions

我正在使用实体框架,并且正在使用Group By子句查询数据。在分组依据中,必须使用多个列。一些列可以为空。问题是,返回时它具有所有正确的组计数,但没有向组添加任何内容。因此,该组是一个由0个项目组成的组。这是下面的代码。

 using (_context = new DbContext())
                {

                    var groups = await _context.vw_PersonItem
                    .AsExpandable()
                    .Where(x => x.PersonName != "")
                    .GroupBy(x => new
                    {
                        x.PersonName,
                        x.Addressline1,
                        x.State,
                        x.Zip,
                        x.FavoriteColor   //< This Can Be Null
                    })
                    .ToListAsync(); 




                  int uniqueCount = 1;

                    foreach (var grp in groups)   // <  It has groups with 0 items
                    {
                            uniqueCount++;

                    }
};

它不会引发错误,并且确实会对分组项目的数量进行计数,但是,如果在“分组依据”字段之一中找到空值,则该组的计数为0?
有什么建议吗?

2 个答案:

答案 0 :(得分:2)

例如:

createStackNavigator({
                screenName:
                    { screen: screenName },                            
                },
                {defaultStackNavigationOptions:{
                    header: () => null   //this in the screen where you want to hide the header
                       }
                    }
                )

仅修改答案即可添加其他语法选项

.GroupBy(x => x?.FavoriteColor ?? -1)

答案 1 :(得分:0)

我对此进行了更多的研究,最终发现0项分组的问题,最终导致使用空值对对象进行分组,但是幕后的联接却使用内部联接。因此,它将创建适当的数字组,但不会因为数据库上的参照完整性而没有填充它们。我最终为此创建了一个具有适当关系的视图,并按照下面的建议处理了空值后,就可以使用