我需要從兩個查詢中創建一個新模型。我有一個成員實體和一個成員團隊實體,它們都具有彼此的引用。我需要的是所有成員名單,並知道該成員是否分配給給定的團隊。將兩個Linq查詢合併爲一個無foreach循環的單個查詢
我目前有以下代碼可以工作,但對我來說似乎笨重,我希望有人有更好的方法來創建這個組合列表只使用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; }
}
喬安娜,感謝您的反饋意見。你的第二種方法就是我所期待的。不過,我看到你對效率的觀點。它看起來更乾淨,但它仍然需要對數據庫進行兩次查詢(針對allMembers和teamMembers)。我希望得到一個單一的選擇聲明,但你的建議仍然更清晰。感謝您的意見。 – bigmac
@bmccleary - 我已經改變了查詢,現在看來似乎更簡單了。它似乎也在做你想做的事 - 參見更新2。 –