在C#中的列表中填充列表而不使用foreach循环.更好的方法?

Kun*_*ter 6 .net c# linq entity-framework list

我有一个对象列表(List-ParentClass),它的对象之一是嵌套列表(List-ChildClass).为了填充List-ChildClass,我使用了一个foreach循环,如下所示.我还嵌套了一个linq查询,如下所示.

在这一点上,我遇到了一些性能问题,我觉得有更好的方法可以做到这一点,我只是没有找到.

问题:我怎样才能更好/更快地做到这一点?

注 - 这是一个用C#编写的基于Web的.net MVC应用程序.我使用EF回到SQL数据库.

public class ParentClass
{
    public int pcid { get; set; }
    public List<ChildClass> ChildClassList { get; set; }
}

public class ChildClass
{
    public int pcid { get; set; }
    public int ccid { get; set; }
}

public class DoWork 
{
    public void ExampleMethodForEach()
    {
        List<ParentClass> ParentClassList = new List<ParentClass>();

        foreach(ParentClass a in ParentClassList)
        {
            a.ChildClassList = EFDatabase2.where(b => b.pcid == a.pcid).select(b => b.ccid).ToList();
        }
    }

    public void ExampleMethodLinq()
    {
        var ParentClassList = (from a in EFDatabase
                               select new ParentClass
                               {
                                   ccid = a.ccid,
                                   pcid = (from b in EFDatabase2
                                           where b.pcid == a.pcid
                                           select b.ccid).ToList()
                                   //something like this were I nest a query
                               }).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 2

使用关系数据库和 LINQ 的最佳方法是使用联接来关联数据。对于您的情况,最合适的是group join

var ParentClassList =
    (from p in EFDatabase
     join c in EFDatabase2 on p.pcid equals c.pcid into children
     select new ParentClass
     {
         pcid = p.pcid,
         ChildClassList =
             (from c in children
              select new ChildClass
              {
                  pcid = c.pcid,
                  ccid = c.ccid
              }).ToList()
     }).ToList();
Run Code Online (Sandbox Code Playgroud)

这应该给你一个很好的快速单一数据库查询。

PS 希望您的EFDatabaseEFDatabase2变量引用同一个数据库中的两个表。