簡體   English   中英

Linq循環比較值ListBox ASP.NET C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM