[英]Linq Comparing Two Lists and Generating a New One
我正在研究一個MVC4項目,我需要通過比較兩個列表來創建一個新的對象列表。 下面的db
指的是DbContext
對象。
在我工作的項目中,我需要比較兩個列表。 第一個是一學期提供的所有科目。 另一個是學生選擇的科目。
List<Subject> subjects = db.Subjects;
//...
List<Subject> semesterSubjects = student.Subjects;
在這兩個列表中,我需要創建一個項目列表,指出是否每個項目都被選中。 看起來像這樣。
class SubjectSelection
{
public int ID { get; set; }
public String Title { get; set; }
public bool IsSelected { get; set; }
}
我現在需要的是比較subjects
與semesterSubjects
並獲得IEnumerable<SubjectSelection>
我可以使用Linq獲得這樣的結果嗎?
最好的方法是在服務器端完成這項工作。 從學期科目中選擇ID:
var selectedIDs = semesterSubjects.Select(s => s.ID).ToList();
並傳遞給他們查詢:
var query = db.Subjects.Select(s => new SubjectSelection()
{
ID = s.ID,
Title = s.Title,
IsSelected = selectedIDs.Contains(s.ID)
});
如果您使用相同的db上下文實例來檢索學期科目列表和科目列表,那么您可以簡單地使用:
var query = subjects.Select(s => new SubjectSelection()
{
ID = s.ID,
Title = s.Title,
IsSelected = semesterSubjects.Contains(s)
});
實體框架實現了身份映射模式,這意味着它返回主題對象的同一內存實例,該實例由不同的查詢返回。
var allSubjectsWithSelection = subjects.Select(o=>new SubjectSelection(){ID = o.ID,Title = o.Title, IsSelected = semesterSubjects.Any(s=>s.ID == o.ID)}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.