C# 如何从列表中删除不带';是否不包含与字典中的值匹配的对象?

C# 如何从列表中删除不带';是否不包含与字典中的值匹配的对象?,c#,linq,list,dictionary,C#,Linq,List,Dictionary,我用LINQ得出了这个结论: records.RemoveAll(x => !(x.MyList.Contains(values[0]) || x.MyList.Contains(values[1]) || x.MyList.Contains(values[2]) || ... ) ); 记录是一个列表,它有一个列表MyList values是一个OrderedDictionary,但如果有一个解决方案不需要通过索引访问它,它可以很容易地成为一个字典 我对这段代码的问题是,

我用LINQ得出了这个结论:

records.RemoveAll(x => 
    !(x.MyList.Contains(values[0]) || x.MyList.Contains(values[1]) || x.MyList.Contains(values[2]) || ... )
);
  • 记录
    是一个
    列表
    ,它有一个
    列表MyList
  • values
    是一个
    OrderedDictionary
    ,但如果有一个解决方案不需要通过索引访问它,它可以很容易地成为一个
    字典

我对这段代码的问题是,我事先不知道
值的大小,也不能像这样硬编码。这里有没有使用for或foreach循环的方法?或者,我怎样才能实现这一行代码呢?

我想它会是这样的

records.RemoveAll(x => 
    !(values.Any(v=>x.MyList.Contains(v)))
);

我想大概是这样

records.RemoveAll(x => 
    !(values.Any(v=>x.MyList.Contains(v)))
);
这同样有效

records.Except(values.Select(v => v.Value)).ToList().ForEach(a => records.Remove(a.ToString())) ;
这同样有效

records.Except(values.Select(v => v.Value)).ToList().ForEach(a => records.Remove(a.ToString())) ;
试试这个:

var values = new OrderedDictionary()
{
    { "A", null },
    { "B", null },
    { "C", null },
    { "D", null },
    { "E", null },
};
var records = new List<CustomObject>
{
    new CustomObject{ Id = 1, MyList = new List<string>(){ "A", "B" }},
    new CustomObject{ Id = 2, MyList = new List<string>(){ "C", "F" }},
    new CustomObject{ Id = 3, MyList = new List<string>(){ "G", "H" }}
};

records.RemoveAll(record => !record.MyList.Any(item => values.Contains(item)));
foreach (var record in records)
{
    Console.WriteLine("Id={0}, MyList={1}",
        record.Id, String.Join(", ", record.MyList.ToArray()));
}
var values=new OrderedDictionary()
{
{“A”,null},
{“B”,null},
{“C”,null},
{“D”,null},
{“E”,null},
};
var记录=新列表
{
新的CustomObject{Id=1,MyList=new List(){“A”,“B”},
新的CustomObject{Id=2,MyList=new List(){“C”,“F”},
新的CustomObject{Id=3,MyList=new List(){“G”,“H”}
};
records.RemoveAll(record=>!record.MyList.Any(item=>values.Contains(item));
foreach(记录中的var记录)
{
WriteLine(“Id={0},MyList={1}”,
record.Id,String.Join(“,”,record.MyList.ToArray());
}
试试这个:

var values = new OrderedDictionary()
{
    { "A", null },
    { "B", null },
    { "C", null },
    { "D", null },
    { "E", null },
};
var records = new List<CustomObject>
{
    new CustomObject{ Id = 1, MyList = new List<string>(){ "A", "B" }},
    new CustomObject{ Id = 2, MyList = new List<string>(){ "C", "F" }},
    new CustomObject{ Id = 3, MyList = new List<string>(){ "G", "H" }}
};

records.RemoveAll(record => !record.MyList.Any(item => values.Contains(item)));
foreach (var record in records)
{
    Console.WriteLine("Id={0}, MyList={1}",
        record.Id, String.Join(", ", record.MyList.ToArray()));
}
var values=new OrderedDictionary()
{
{“A”,null},
{“B”,null},
{“C”,null},
{“D”,null},
{“E”,null},
};
var记录=新列表
{
新的CustomObject{Id=1,MyList=new List(){“A”,“B”},
新的CustomObject{Id=2,MyList=new List(){“C”,“F”},
新的CustomObject{Id=3,MyList=new List(){“G”,“H”}
};
records.RemoveAll(record=>!record.MyList.Any(item=>values.Contains(item));
foreach(记录中的var记录)
{
WriteLine(“Id={0},MyList={1}”,
record.Id,String.Join(“,”,record.MyList.ToArray());
}

什么是“记录”和“myList”?如果我正确理解了这个问题,您可以通过生成一个新列表来反向解决它,该列表只包含在字典中找到的类似于以下内容的值:list=list.Where(item=>myDictionary.ContainsKey(item)).ToList()@布雷特,我编辑了我的问题来添加这些信息。“记录”和“我的列表”的类型是什么?如果我正确理解了这个问题,您可以通过生成一个新列表来反向解决它,该列表只包含在字典中找到的类似于以下内容的值:list=list.Where(item=>myDictionary.ContainsKey(item)).ToList()@布雷特,我编辑了我的问题来添加这些信息。谢谢!我遇到了一个错误,所以我将一部分更改为
x.MyList.Contains(v.Value)
,它工作得非常好。谢谢!我遇到了一个错误,所以我将其中的一部分更改为
x.MyList.Contains(v.Value)
,它工作得非常好。