使用IEnumerable.Select筛选记录

本文关键字:记录 筛选 Select IEnumerable 使用 | 更新日期: 2023-09-27 18:10:53

. NET MVC 4项目,我有一个模型的连接(与有效载荷):

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

我想把联盟里所有活跃的成员都拉过来。因此,在League模型中,我创建了这样一个属性:

public virtual ICollection<LeagueMember> LeagueMembers { get; set; }
public IEnumerable<Member> GetActiveMembers
{
    get
    {
        return LeagueMembers.Select(a => a.IsActive == true ? a.Member : null);
    }
}

但是看起来它返回的集合的大小等于所有Members的大小(非活动成员的值为空)。

是否有更好的方法在匿名方法中应用过滤器以避免null ?

使用IEnumerable.Select筛选记录

但是看起来它返回的集合的大小等于所有成员(非活动成员为空值)。

因为你明确地告诉它这样做。在你的代码中,你告诉查询返回一个Member实例是成员是活跃的或一个null如果成员是不活跃的。

return LeagueMembers.Select(a => a.IsActive == true ? a.Member : null);

您可以不使用?表达式,只需执行a:

return LeagueMembers
    .Where(a => a.IsActive.GetValueOrDefault(false))
    .Select(o=>o.Member);

只需删除选择方法中的三元条件。

public IEnumerable<Member> GetActiveMembers
{
    get
    {
        return from activeMember in LeagueMembers
               where activeMember.IsActive == true
               select activeMember.Member;
        //return LeagueMembers.Select(a => a.IsActive == true);
    }
}