根据另一个列表中的项目设置列表中项目的属性

时间:2013-05-16 20:18:34

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

注意所有名单/ 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将变为false。

任何人都可以帮助我吗?谢谢!

修改

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

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

嗯,在某种程度上,这是有效的。它将我正在寻找的项目设置为true。默认情况下,所有m_IsSelected值均为false。

但如果删除该项目,m_IsSelected仍然是正确的,那就是我需要做的事情。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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

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