C# Linq循环比较值列表框ASP.NET C

C# Linq循环比较值列表框ASP.NET C,c#,asp.net,linq,listbox,listboxitem,C#,Asp.net,Linq,Listbox,Listboxitem,我试图通过避免多个foreach循环来压缩代码以完成此任务。我有一个由表a填充的列表框。我需要将这些值与表B进行比较,以填充另一个列表 表A与表B有一对多的关系,虽然我的解决方案暂时有效,但它占用了相当多的内存,所以我需要对其进行压缩 List<int> listProj = new List<int>(); var _tableB = from t in TableB where t.StatID == 1 || t.StatID == 2

我试图通过避免多个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();

那是我的错误。是的,这很接近,但在最终的foreach循环中,我获取了一个非共享值。pID只是表B的一个属性,这就是我需要列出的。我在上面进行了编辑以符合要求。这对我来说似乎是可行的,但我得到了一个错误:无法创建“System.Web.UI.WebControls.ListItemCollection”类型的常量值。在此上下文中仅支持基本类型“如Int32、String和Guid”。对你有用吗?我很感激。我无法执行direct.ToList,因此我执行了lstTableA.Items.Cast.ToList,但收到另一个错误…此方法无法转换为存储表达式。我认为这与混合linq到对象和linq到实体有关…尝试了最新的更新,但得到了与第二条注释相同的错误。。。只有基元类型“如Int32、String和Guid”…我认为method.Any的条件不正确,它应该是g.Value而不是g.ID,还要在末尾添加ToList