5

我有一个字典,其中键是 Id,值是字符串

我现在有一个人员对象列表,其中每个人都有一个 CarIds 属性,它是

IEnumerable<int>

我想基本上过滤对象列表以仅包含其中一个属性包含在字典中的项目。

例如。像这样的东西:

var dictionary = GetDict();

var people = GetPeople();

 people = people.Where(r => dictionary.ContainsAny(r.CarIds)).ToList();

是否存在这样的事情,我可以做类似于 ContainsKey() 但检查 ints 列表中的任何事情?

4

2 回答 2

6

是的,你可以试试这个列表:

people = people.Where(r => list.Intersect(r.CarIds).Count() != 0).ToList();

对于字典,您可以使用:

people = people.Where(r => r.CarIds.Any(n => dictionary.ContainsKey(n))).ToList();
于 2013-04-22T03:19:14.973 回答
6

你最好的选择可能是扩展 Dictionary (可能应该有一个ContainsAny()or 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));  }
于 2013-04-22T03:27:44.010 回答