从列表中删除项目(如果其他列表中存在)

时间:2014-04-08 13:31:45

标签: c# list

我有一个班级:

[Serializable()]
public class Computer
{

    [System.Xml.Serialization.XmlElement("Id")]
    public int Id { get; set; }

    [System.Xml.Serialization.XmlElement("Name")]
    public string Name { get; set; }

    [System.Xml.Serialization.XmlElement("Cost")]
    public double Cost { get; set; }

    public string NameCost
    {
        get
        {
            return Name + " " + Cost.ToString(CultureInfo.InvariantCulture);
        }
    }
}

我有三个清单。其中一个包含成本最低的计算机,另一个包含最高成本的计算机。包含所有元素的最后一个列表。我需要删除所有元素的列表,除了那些存在于其他两个列表中的元素。你知道吗?帮助,PLZ。祝你有愉快的一天!

2 个答案:

答案 0 :(得分:2)

效率不高但应该有效:

listWithAllPC = listWithAllPC
    .Where(pc => listWithMinCostPC.Any(minPC => pc.Id == minPC.Id)
              && listWithMaxCostPC.Any(maxPC => pc.Id == maxPC.Id))
    .ToList();

答案 1 :(得分:-1)

var idList = list1.Union(list2).Select(x => x.Id).ToList();
list3.RemoveAll(x => !idList.Contains(x.Id));