9

ASP.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 です)。

null を回避するために匿名メソッドでフィルターを適用するより良い方法はありますか?

4

2 に答える 2

12

しかし、すべてのメンバーのサイズに等しいサイズのコレクションを返すように見えます (非アクティブなメンバーの値は null です)。

あなたが具体的にそうするように言っているからです。Memberコードでは、メンバーがアクティブである場合、またはメンバーがアクティブでない場合は、インスタンスを返すようにクエリに指示していますnull

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

式をやめて、次の?ことを行うだけです。

return LeagueMembers
    .Where(a => a.IsActive.GetValueOrDefault(false))
    .Select(o=>o.Member);
于 2013-04-26T02:52:33.550 に答える
4

Select Method 内の三項条件を削除するだけです。

public IEnumerable<Member> GetActiveMembers
{
    get
    {
        return from activeMember in LeagueMembers
               where activeMember.IsActive == true
               select activeMember.Member;
        //return LeagueMembers.Select(a => a.IsActive == true);
    }
}
于 2013-04-26T02:54:16.460 に答える