簡體   English   中英

Linq比較兩個列表並創建一個新列表

[英]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; }
}

我現在需要的是比較subjectssemesterSubjects並獲得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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM