2011-04-10 74 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)) 

這工作得很好,我和會爲你工作也。