gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:53:16 25 4
gpt4 key购买 nike

我在对象列表 (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();
}
}

最佳答案

使用关系数据库和 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();

这应该会为您提供快速的单一数据库查询。

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

关于c# - 在不使用 foreach 循环的 C# 中填充列表中的列表。更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37213667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com