使用具有 Null 字段的 Group by 查询 DataContext 的正确方法
Proper way to query DataContext using Group by that has fields with Nulls
我正在使用 Entity Framework,并且我正在使用 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?
有什么建议吗?
例如:
.GroupBy(x => x?.FavoriteColor ?? -1)
刚刚修改答案以添加另一个语法选项
GroupBy(x => x.FavoriteColor == null ? -1 : x.FavoriteColor)
我对此进行了更多挖掘,并解决了具有 0 个项目的组的问题,最终发现分组是在对象上使用空值完成的,但是幕后的连接使用的是内部连接。因此,它会创建适当的数字组,但不会因为数据库上的引用完整性而不会填充它们。我最终为此创建了一个具有适当关系的视图,并按照下面的建议处理了空值后,我让它工作了
我正在使用 Entity Framework,并且我正在使用 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?
有什么建议吗?
例如:
.GroupBy(x => x?.FavoriteColor ?? -1)
刚刚修改答案以添加另一个语法选项
GroupBy(x => x.FavoriteColor == null ? -1 : x.FavoriteColor)
我对此进行了更多挖掘,并解决了具有 0 个项目的组的问题,最终发现分组是在对象上使用空值完成的,但是幕后的连接使用的是内部连接。因此,它会创建适当的数字组,但不会因为数据库上的引用完整性而不会填充它们。我最终为此创建了一个具有适当关系的视图,并按照下面的建议处理了空值后,我让它工作了