如何获取至少包含另一个列表的所有值的列表

本文关键字:列表 另一个 包含 何获取 获取 | 更新日期: 2023-09-27 17:59:58

我遇到的情况是,一个列表必须至少包含另一个列表的值。假设我们有一个值为1、2、3的列表A。这是包含必需值的列表。

列表B的值为1、5、6、7
列表C的值为1、2、3、4、7
列表D具有值2、5、6

在这种情况下,我只想要列表C,因为这是唯一一个包含值1、2和3的列表。

我试过这个,但这不起作用,因为它总是真的:

query = from doc in query
        let tagIds = from t in doc.Tags select t.Id
        where parameters.TagIds.Except(tagIds).Count() <= parameters.TagIds.Count()
        select doc;

使用时:

 query = from doc in query
        let tagIds = from t in doc.Tags select t.Id
        where !parameters.TagIds.Except(tagIds).Any<int>()
        select doc;

我只得到与"必需"列表完全匹配的列表。

我的问题是,如何解决Linq2SQL查询中的问题?

如何获取至少包含另一个列表的所有值的列表

尝试

var query = from doc in query
            let tagIds = from t in doc.Tags select t.Id
            where parameters.All(p => tagIds.Contains(p))
            select doc;

尝试此链接

.NET有办法检查列表a是否包含列表b中的所有项吗?

在这里,您可以在所有可用的列表中运行相同的上述方法。

public static bool ContainsAllItems(List<T> a, List<T> b)
{
    return !b.Except(a).Any();
}

这会检查b中是否有不在a中的元素,然后反转结果。