[英]Linq Loop Compare Values ListBox ASP.NET C#
我試圖通過避免多個foreach循環來完成此任務來壓縮我的代碼。 我有一個由表A填充的列表框。我需要將這些值與表B進行比較以填充另一個列表。
表A與表B有一對多的關系,雖然我的解決方案暫時可以使用,但它占用了大量內存,因此我需要進行壓縮。
List<int> listProj = new List<int>();
var _tableB = from t in TableB
where t.StatID == 1 || t.StatID == 2
select p.ID;
var _tableA = from ListItem n in lstTableA.Items
where _tableB.Contains(int.Parse(n.Value)) && n.Selected == true
select n;
foreach (ListItem i in _tableA)
{
int affID = Convert.ToInt32(i.Value);
if (TableB.Where(t => t.ID == affID && t.StatID == 1 || t.StatID == 2).Any()
{
foreach(var item in TableB.Where(t => t.ID == affID && t.StatID == 1 || t.StatID == 2)
{
int pID = Convert.ToInt32(item.pID);
listProject.Add(projID);
}
}
}
主要問題是這兩個循環正在遍歷大量記錄,這會導致內存泄漏。 我覺得有一種方法可以一次抓取許多記錄並將它們添加到列表中,因此表A和表B之間是一對多的關系。
我認為這將為您提供與上述整個代碼相同的結果,除非我在您的程序邏輯上犯了一個錯誤。
這將返回項目ID:
List<int> listProj = (from t in TableB
where (from n in lstTableA.Items.Cast<ListItem>().ToList()
where n.Selected == true
select n).Any(g => int.Parse(g.Value) == t.ID)
&& (t.StatID == 1 || t.StatID == 2)
select t.pID).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.