[英]DataGridView bind to a list of Objects which contain a Dictionary
[英]How to remove instances from a List, which don't contain objects that match values from a Dictionary?
我使用LINQ想到了这一点:
records.RemoveAll(x =>
!(x.MyList.Contains(values[0]) || x.MyList.Contains(values[1]) || x.MyList.Contains(values[2]) || ... )
);
records
是一个List<CustomObject>
,它具有一个List<string> MyList
values
是一个OrderedDictionary
,但如果有不需要按索引访问它的解决方案,则可以很容易地是Dictionary<string,string>
。 这段代码的问题是我不知道values
的大小,也无法像这样硬编码它。 有没有办法在这里使用for或foreach循环? 或者,我还能如何实现这一行代码?
我认为这将是
records.RemoveAll(x =>
!(values.Any(v=>x.MyList.Contains(v)))
);
尝试这个:
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()));
}
这也可以...
records.Except(values.Select(v => v.Value)).ToList().ForEach(a => records.Remove(a.ToString())) ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.