使用来自2个数据表的linq执行“not in”查询

时间:2011-04-10 16:56:16

标签: asp.net linq

我有一个包含“InvalidCodes”的数据表。

在将数据上传到数据库之前(数据仍然在数据表中),我想在数据表上执行linq以删除无效的条目并将它们移动到另一个数据表中

datatable allEntries(尚未上传到数据库中的条目) datatable InvalidCodes(单列数据表 - 从数据库中检索) datatable invalidEntries

现在“allEnties”包含有效条目和无效条目。 “allEntries”上的linq查询应该将非执行代码条目移动到invalidEntries数据表。

请帮助我执行此操作。

以下是我形成的查询,但无效

string query = "select [CityCode] from [StateCity] ";
DataTable citylist = getDataTableFromSelect(query);

var result = from myrow in inputDt.AsEnumerable()
             where !myrow.Field<string>("CityCode").Contains(from myrow2 in citylist.AsEnumerable() select myrow2.Field<string>("CityCode") )
             select myrow;

2 个答案:

答案 0 :(得分:2)

我为无效的城市代码制作一个HashSet - 这将允许代码快速/有效地识别哪些代码在无效的集合中。

e.g。类似的东西:

var invalidCityCodes = from myrow2 in citylist.AsEnumerable()
                       select myrow2.Field<string>("CityCode");

var invalidCityCodeHashSet = new HashSet<string>(invalideCityCodes);

var result = from myrow in inputDt.AsEnumerable()
             where !invalidCityCodeHashSet.Contains(myrow.Field<string>("CityCode"))
             select myrow;

答案 1 :(得分:1)

您也可以将结果记录在2个不同的列表中,然后就可以了 使用

List1 = List1.RemoveAll(Item=>List2.Contains(Item))

这对我很好,也适合你。