2011-04-10 87 views
0

我有一个包含“InvalidCodes”的数据表。使用2个数据表中的linq执行“不在”查询

之前的数据上传到数据库(数据仍然在数据表),我想在数据表执行的LINQ to删除无效的项目,而在另一个数据表

数据表allEntries移动它们(条目但在数据库中上载) datatable InvalidCodes(单列数据表 - 从数据库中检索) datatable invalidEntries

现在“allEnties”包含有效条目和无效条目。 “allEntries”上的linq查询应将非扩展代码条目移至invalidEntries数据表。

plz帮我执行此操作。

下面

是我形成的查询,但它不是有效

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

我会做一个HashSet为无效的城市代码 - 这将使得代码快速/高效地识别代码都在无效集。

例如是这样的:

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

你也可以采取两种结果在2名不同的列表,然后你可以使用

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

这工作得很好,我和会为你工作也。