用于子对象属性的LINQ'in'子句

时间:2012-06-27 15:21:44

标签: c# linq

使用以下对象层次结构,我需要确认每个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>

2 个答案:

答案 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));