使用以下对象层次结构,我需要确认每个Id
的{{1}}中是否存在所有字符串Inventories
值,例如
鉴于SearchResult
确认所有string[] list = { "123", "234", "345" }
值在list
元素数组中至少出现一次。我很好奇我是否可以使用一个LINQ语句清理它。
Inventory
现在,我正在分割SearchResult
--
Inventory[] Inventories
Inventory
--
String Id
,例如
list
迭代字典,测试每个库存。然后,我创建一个新的list.Split(').ToDictionary(i => i.ToString(), i => false)
并添加项目,如果字典中没有任何错误值。这感觉很笨重。
List<SearchResult>
答案 0 :(得分:3)
这是我写的一些代码。这里的优点是它使用哈希映射,因此它具有理论上的线性复杂度。
public static bool ContainsAll<T>(this IEnumerable<T> superset, IEnumerable<T> subset, IEqualityComparer<T> comparer)
{
var set = new HashSet<T>(superset, comparer);
return set.IsSupersetOf(subset);
}
答案 1 :(得分:1)
LINQ的这一位将遍历整个股票,然后查询库存(如果它不为空)并找到包含列表中某个值的库存。
var matches = instock.Where(stock => stock.Inventory != null && stock.Inventory.All(i => list.Contains(i.Id));