C# Linq循环比较值列表框ASP.NET C
我试图通过避免多个foreach循环来压缩代码以完成此任务。我有一个由表a填充的列表框。我需要将这些值与表B进行比较,以填充另一个列表 表A与表B有一对多的关系,虽然我的解决方案暂时有效,但它占用了相当多的内存,所以我需要对其进行压缩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
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