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; }
}
私はリーグのアクティブなメンバー全員を引き寄せようとしています。したがって、リーグモデルでは、次のようなプロパティを作成しました。
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を回避するために匿名メソッドでフィルターを適用するより良い方法はありますか?
Selectメソッド内で3項条件を削除するだけです。
public IEnumerable<Member> GetActiveMembers
{
get
{
return from activeMember in LeagueMembers
where activeMember.IsActive == true
select activeMember.Member;
//return LeagueMembers.Select(a => a.IsActive == true);
}
}
しかし、すべてのメンバーのサイズに等しい(非アクティブなメンバーの場合はnull値を持つ)コレクションを返すようです。
あなたは具体的にそうするように言っているので。コードでは、クエリがMember
インスタンスを返すように指示しています。メンバーはアクティブですOR a null
メンバーがアクティブでない場合。
return LeagueMembers.Select(a => a.IsActive == true ? a.Member : null);
?
式を使用して、次の操作を行います。
return LeagueMembers
.Where(a => a.IsActive.GetValueOrDefault(false))
.Select(o=>o.Member);