leo*_*ora 5 c# linq collections
我有一个字典,其中Key是一个Id,值是一个字符串
我现在有一个人物对象列表,其中每个人都有一个CarIds属性
IEnumerable<int>
Run Code Online (Sandbox Code Playgroud)
我想基本上过滤对象列表,只包括其中一个属性包含在dict中的项目.
例如.这样的事情:
var dictionary = GetDict();
var people = GetPeople();
people = people.Where(r => dictionary.ContainsAny(r.CarIds)).ToList();
Run Code Online (Sandbox Code Playgroud)
这样的事情是否存在于我可以做类似于ContainsKey()的事情但是检查int中的任何一个?
你最好的选择可能是扩展词典(可能应该有一个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;
}
Run Code Online (Sandbox Code Playgroud)
这可以是linq'd:
public static bool ContainsAny<K, V>(
this Dictionary<K, V> dict, IEnumerable<K> keys)
{ return keys.Any(key => dict.ContainsKey(key)); }
Run Code Online (Sandbox Code Playgroud)
是的,你可以尝试这个列表:
people = people.Where(r => list.Intersect(r.CarIds).Count() != 0).ToList();
Run Code Online (Sandbox Code Playgroud)
对于词典,您可以使用:
people = people.Where(r => r.CarIds.Any(n => dictionary.ContainsKey(n))).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |