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

时间:2014-04-25 10:21:22

标签: c# linq linq-to-sql

我的情况是列表必须至少包含另一个列表的值。因此,假设我们列出了值为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;

我只会获得列表与列表完全匹配的列表&#39; required&#39;列表。

我的问题是,如何在Linq 2 SQL查询中解决我的情况?

2 个答案:

答案 0 :(得分:1)

尝试

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;

答案 1 :(得分:0)

试试此链接

Does .NET have a way to check if List a contains all items in List b?

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

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

检查b中是否有任何元素不在 - 然后反转结果。