LINQ GroupBy Select 仅在键不为空的情况下
LINQ GroupBy Select only where key is not null
这可能是一个简单的答案。
我正在创建这个 LINQ 表达式,我在其中按“名称”对列表进行分组,然后我创建了一个 SymbolFields 集合,其中组键(名称)用作名称,值连接在一起作为第二个参数.
但问题更多,如何避免可能的空引用?
如果您查看图片,您会发现“可能”存在 group.key
为空的情况。
我只想 select 那些不是 NULL 的。如何根据我的代码执行此操作?
return result
.GroupBy(r => r.Name)
.Select(group =>
new SymbolField(group.Key, string.Join(string.Empty, group.Select(g => g.Symbol))));
我假设这是针对 Linq-to-Objects(而非 Linq-to-Entities)的,您看到的消息是 C# 8.0 #nullable
警告,因为 r.Name
被键入为 String?
而不是 String
.
如果是,则添加一个.Where( r => r.Name != null )
步骤,然后在.GroupBy
步骤中添加一个!
,因为不幸的是,这是C# 8.0编译器的可空性分析的情况之一还不够聪明,无法检测到。
return result
.Where( r => r.Name != null )
.GroupBy( r => r.Name! )
.Select( grp =>
new SymbolField(
name : grp.Key,
something: string.Join( separator: string.Empty, grp.Select( g => g.Symbol ) )
)
);
这可能是一个简单的答案。
我正在创建这个 LINQ 表达式,我在其中按“名称”对列表进行分组,然后我创建了一个 SymbolFields 集合,其中组键(名称)用作名称,值连接在一起作为第二个参数.
但问题更多,如何避免可能的空引用?
如果您查看图片,您会发现“可能”存在 group.key
为空的情况。
我只想 select 那些不是 NULL 的。如何根据我的代码执行此操作?
return result
.GroupBy(r => r.Name)
.Select(group =>
new SymbolField(group.Key, string.Join(string.Empty, group.Select(g => g.Symbol))));
我假设这是针对 Linq-to-Objects(而非 Linq-to-Entities)的,您看到的消息是 C# 8.0 #nullable
警告,因为 r.Name
被键入为 String?
而不是 String
.
如果是,则添加一个.Where( r => r.Name != null )
步骤,然后在.GroupBy
步骤中添加一个!
,因为不幸的是,这是C# 8.0编译器的可空性分析的情况之一还不够聪明,无法检测到。
return result
.Where( r => r.Name != null )
.GroupBy( r => r.Name! )
.Select( grp =>
new SymbolField(
name : grp.Key,
something: string.Join( separator: string.Empty, grp.Select( g => g.Symbol ) )
)
);