在ASP.NET MVC 4项目中,我有一个连接模型(with payload):
public class LeagueMember
{
[Key, Column(Order = 0)]
public int MemberId { get; set; }
[Key, Column(Order = 1)]
public int LeagueId { get; set; }
public bool? IsActive { get; set; }
[Required]
public virtual League League { get; set; }
[Required]
public virtual Member Member { get; set; }
}
我正在努力吸引联盟中所有活跃的成员。所以,在联盟模型中,我创建了一个这样的属性:
public virtual ICollection<LeagueMember> LeagueMembers { get; set; }
public IEnumerable<Member> GetActiveMembers
{
get
{
return LeagueMembers.Select(a => a.IsActive == true ? a.Member : null);
}
}
但它看起来像是返回一个大小等于所有Members
大小的集合(非活动成员的值为null)。
有没有更好的方法在匿名方法中应用过滤器以避免空值?
答案 0 :(得分:12)
但它看起来像是返回一个大小等于的集合 所有成员(非活动成员的空值)。
因为你特别告诉它这样做。在您的代码中,您告诉查询返回Member
实例是成员是活动的还是null
如果成员不活动。
return LeagueMembers.Select(a => a.IsActive == true ? a.Member : null);
您可以使用?
表达式,只需执行以下操作:
return LeagueMembers
.Where(a => a.IsActive.GetValueOrDefault(false))
.Select(o=>o.Member);
答案 1 :(得分:4)
只需在选择方法中移除您的三元条件。
public IEnumerable<Member> GetActiveMembers
{
get
{
return from activeMember in LeagueMembers
where activeMember.IsActive == true
select activeMember.Member;
//return LeagueMembers.Select(a => a.IsActive == true);
}
}