2つのクエリから新しいモデルを作成する必要があります。私にはMemberエンティティとMemberTeamエンティティがあり、どちらも相互に参照しています。必要なのは、すべてのメンバーのリストと、メンバーが特定のチームに割り当てられているかどうかを知ることです。
私は現在、機能するが不格好に見える次のコードを持っています。誰かが、Linqステートメントのみを使用して(foreachなしで)この結合リストを作成するためのより良い方法を持っていることを望んでいます。基本的に、コードはすべてのメンバーのリストを取得し、チームに割り当てられているメンバーの別のリストを取得してから、foreachループを使用してメンバーがチームに割り当てられているかどうかを確認します。
int teamId = 1;
var model = new SelectedMemberListModel();
List<Member> allMembers = _unitOfWork.RepositoryFor<Member>().All().ToList();
List<Member> teamMembers = _unitOfWork.RepositoryFor<MemberTeam>().AllIncluding(x => x.Members).Single(x => x.Id == teamId).Members.ToList();
List<SelectedMemberModel> membersWithTeamSelected = new List<SelectedMemberModel>();
foreach (var member in allMembers)
{
SelectedMemberModel selectedMemberModel = new SelectedMemberModel();
selectedMemberModel.FirstName = member.FirstName;
selectedMemberModel.LastName = member.LastName;
if(teamMembers.Contains(member))
{
selectedMemberModel.Selected = true;
}
membersWithTeamSelected.Add(selectedMemberModel);
}
私のモデルをよりよく理解する必要がある場合は、ここに私のエンティティがあります:
public class Member
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int TeamId { get; set; }
public virtual MemberTeam Team { get; set; }
//... Other properties here...
}
public class MemberTeam
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Member> Members { get; set; }
}
public class SelectedMemberModel
{
public int MemberId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Selected { get; set; }
}