【问题标题】:Setting a property of an item in a list based on items in another list根据另一个列表中的项目设置列表中项目的属性
【发布时间】:2013-05-16 20:18:33
【问题描述】:

注意所有列表/LINQ 爱好者,我有一个小挑战。

我有两个列表:

List<ObjectInfo> firstListObject;
List<ObjectInfo> secondListObject;

第一个列表是我用来管理数据的列表。随着过程的进行,我用来添加项目的第二个列表。所以,我会不时地在我的清单上添加/删除项目。

我有这些字段:

public int m_ObjectID { get;set; }
public bool m_IsSelected { get;set; }

我的意图是每次“更新”我的secondListObject 时,我都需要滚动查看所有firstListObject 以将m_IsSelected 值设置为true。 ELSE该值必须是false,这意味着如果一个项目第一次出现在列表中,然后被删除,则该项目的m_IsSelected 为假。

谁能帮帮我?谢谢!

编辑

这是我到目前为止所做的:

foreach (var singleOrDefault in secondListObject
    .Select(objectInfo => firstListObject
        .SingleOrDefault(_item => _item.m_ObjectID == inventoryInfo.m_ObjectID))
    .Where(singleOrDefault => singleOrDefault != null))
{
    singleOrDefault
        .m_IsSelected = true;
}

嗯,在某种程度上,这是可行的。它将我正在寻找的项目设置为真。默认情况下,所有m_IsSelected 的值都是假的。

但是,如果我删除该项目,m_IsSelected 仍然为真,这就是我需要做的。

所以,一句话:我需要在firstListObject 中创建一个循环,并检查secondListObject 的每个项目是否有任何“出现”(基于ID)。如果这是真的,我会将m_IsSelected 切换为真。我只需要确保m_IsSelected 是假的,我不知道该怎么做...

【问题讨论】:

  • 到目前为止你尝试过什么?您在尝试解决此问题时遇到了哪些问题?
  • 再次,您的问题不清楚。这些属性是ObjectInfo 类的成员还是在其他地方?你能用步骤(1...2...3...)表达你的想法吗?
  • 是的,我无法想象这个问题。
  • 天哪!我虽然我的问题很简单。 :|我会在我的帖子中添加信息!对不起!
  • 对不起,我希望这更清楚,如果不是,请随时告诉我您需要什么。

标签: c# asp.net-mvc linq list


【解决方案1】:

您可以先将所有内容设置为 false,然后将您想要的设置为 true:

firstListObject.ForEach(o => o.m_IsSelected = false);
// your foreach goes here

【讨论】:

  • 有趣!我会深入研究的。听起来这可能是一个不错的选择。
【解决方案2】:

所以这在很大程度上取决于您在此之前所做的事情。 如果您创建了 firsListObject 而根本没有修改它。然后列表中所有对象的 o.m_IsSelected 将为“false”,因为这是布尔值的默认初始化值,除非您将它们设置为不同的值。

那么您只需要更新必须设置为 true 的对象。

如果您已更新列表并修改了已选择和未选择的内容,则需要刷新。然后 Kenneth 选项很好,然后您可以在初始化所有值后再次执行您的代码。

您还有第三个选项,您想一次性更新所有项目。你可以这样做:

foreach (var item in secondListObject)
{
    item.m_IsSelected = firstListObject.Any(x => x.m_ObjectID == item.m_ObjectID);
}

【讨论】:

  • 好吧,此时,考虑第一个列表是静态的,不会改变,只有第二个列表的内容会根据用户的选择而改变。
  • 你的 secondListObject 呢? firstListObject 是否包含系统的所有可能项?而 secondListObject 将始终具有 firstListObject 项的子集?
  • firstListObject 是我在达到此阶段之前使用的列表。根据搜索参数,我用需要的数据填充它,所以有时它可能包含 20 个项目,有时是 575 个,等等。但是当我使用第二个列表时,只要程序没有“重新启动”或搜索重做,第一个列表就会保持静态。这是因为第一个列表是“浏览”类别,第二个是“使用”类别,如果您明白我的意思的话。
  • 好的,您需要做的是将项目重置为 select=false,然后是您的代码。或者直接使用我建议的 foreach 循环,根据是否在另一个列表中找到该项目来设置 true 或 false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2019-02-16
  • 2015-01-02
  • 2019-06-06
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多