【问题标题】:Linq Loop Compare Values ListBox ASP.NET C#Linq 循环比较值列表框 ASP.NET C#
【发布时间】:2014-06-29 21:29:49
【问题描述】:

我试图通过避免多个 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 之间是一对多的关系。

【问题讨论】:

    标签: c# asp.net linq listbox listboxitem


    【解决方案1】:

    我认为这会给你与上面整个代码相同的结果,除非我在你的程序逻辑上犯了错误。

    这将返回项目 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')。它对您有用吗?
    • 我很感激。我无法直接执行“.ToList()”,所以我执行了“lstTableA.Items.Cast().ToList()”,但收到另一个错误“...此方法无法翻译成商店表达。”我认为这与将 linq 与对象和 linq 与实体混合有关......
    • 尝试了最新的更新,但得到了与第二条评论相同的错误。 “...只有原始类型('例如 Int32、String 和 Guid')...”
    • 我觉得方法.Any()的条件不对,应该是g.Value而不是g.ID,最后还要加上ToList()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多