我有一个字典,其中Key是一个Id,值是一个字符串
我现在有一个人物对象列表,其中每个人都有一个
的CarIds属性IEnumerable<int>
我想基本上过滤对象列表,只包含其中一个属性包含在dict中的项目。
例如。像这样的东西:
var dictionary = GetDict();
var people = GetPeople();
people = people.Where(r => dictionary.ContainsAny(r.CarIds)).ToList();
这样的事情是否存在于我可以做类似于ContainsKey()的事情,但检查一下整数列表中的任何一个?
答案 0 :(得分:6)
你最好的选择可能是扩展词典(可能应该有ContainsAny()
或ContainsAnyKey()
)。
public static bool ContainsAny<K, V>(
this Dictionary<K, V> dict, IEnumerable<K> keys)
{
foreach(K key in keys)
if(dict.ContainsKey(key)) return true;
return false;
}
这可以是linq'd:
public static bool ContainsAny<K, V>(
this Dictionary<K, V> dict, IEnumerable<K> keys)
{ return keys.Any(key => dict.ContainsKey(key)); }
答案 1 :(得分:5)
是的,你可以尝试这个列表:
people = people.Where(r => list.Intersect(r.CarIds).Count() != 0).ToList();
对于词典,您可以使用:
people = people.Where(r => r.CarIds.Any(n => dictionary.ContainsKey(n))).ToList();