Linq比较C#中的两个集合

Use*_*983 4 c# linq

我想比较C#中的两个集合,我目前正在使用嵌套的"for"循环.在Linq有没有办法做同样的事情会更快更有效?这是我目前的代码,它只是寻找一种有效的方法:

OrgCollection myYears = Org.RetrieveDistinctYear();
if (myYears.Count > 0)
{
AcademicYearCollection allYears = AcademicYear.RetrieveAll();
for (int i = 0; i < myYears.Count; i++)
{
    for (int j = 0; j < allYears.Count; j++)
    {
        if (myYears[i].AcademicYearCode == allYears[j].Code)
        {
        ddlYear.Items.Insert(0, new ListItem(allYears[j].Name,allYears[j].Code));
        break;
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我想将AcademicYearCollection中的"Code"与OrgCollection中的"AcademicYearCode"属性进行比较,如果它是相同的,则将其添加到Dropdownlist"ddlYear"中.

提前致谢.

And*_*bel 14

您可以在LINQ中执行此操作,从而提供更短的代码.要知道它是否更有效,您必须对其进行分析.我认为linq的join运算符使用某种类型的散列桶,这应该可以提供更好的性能,尤其是在集合很大的情况下.您当前的解决方案是O(N ^ 2),如果选项数量增加,它将迅速降级.

OrgCollection myYears = Org.RetrieveDistinctYear();
AcademicYearCollection allYears = AcademicYear.RetrieveAll();

var items = from y in myYears
            join ay in allYears
            on y.Code equals ay.AcademicYearCode
            select new { ay.Name, ay.Code }
Run Code Online (Sandbox Code Playgroud)