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)
使用关系数据库和 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 希望您的EFDatabase和EFDatabase2变量引用同一个数据库中的两个表。