过滤DataTable,其中表不包含List <string> </string>中的项目

时间:2011-12-20 12:11:24

标签: c# linq

我在查询DataSet.Tables [0]时遇到了一些问题,并删除了不符合List标准的行。

//This is my list
var values = new List<string> {"Test", "Test2"};

// Now I just query the DataSet for anything that doesnt match this list
var query = from x in ds.Tables[0].AsEnumerable()
            from b in values
            where !x.Field<string>("ColumnName").Contains(b)
            select x;

这可以工作并返回结果,但它返回2 x组相同的行(我假设没有连接)。

我怎样才能获得这些行的不同值?

3 个答案:

答案 0 :(得分:7)

听起来你可能想要:

var query = from x in ds.Tables[0].AsEnumerable()
            where !values.Any(b => x.Field<string>("ColumnName").Contains(b))
            select x;

换句话说,找到values中任何值中“ColumnName”字段值不存在的所有行。

答案 1 :(得分:0)

也许您要找的是DistinctIntersect方法,而不是“.Contains”?

答案 2 :(得分:0)

您无需加入values列表:

var query = from x in ds.Tables[0].AsEnumerable()
        where !values.Any(str => x.Field<string>("ColumnName").Contains(str))
        select x;