2011-04-02 21 views
0

我有一個用HTTP發佈到一個* .aspx頁面的id列表。在服務器上,我試圖將該列表與對象列表進行比較,以查看哪些對象的PrimaryKey ID字段缺少來自沒有相應對象(添加)的發佈ID(又名刪除)和ID的ID。這是我的LINQ得到刪除:LINQ包含帶有列表的語法<string>

List<string> ids = new List<string>(txtParticipants.Value.Split(',')); 
List<NetworkEvent> deletes = e.NetworkEvent.Where(c => 
     !ids.Contains(c.NetworkID.ToString())).ToList<NetworkEvent>(); 

此刪除查詢工作正常。我的問題是產生相反的,補充。這是我的嘗試(我需要幫助)。問題是我如何引用Contains()謂詞中List的字符串?很明顯,c本身是錯誤的,但我如何引用它?

List<string> adds = newids.Where(c=> (e.NetworkEvent.Select 
    (z=> z.NetworkID).Contains(int.Parse(c))); 

希望我的問題有道理(?!)。謝謝。

+0

您是否嘗試過使用LINQ的Except()函數。例如:IEnumerable1.Except(IEnumberable2);會給你1中所有不在2中的項目。 – Zachary 2011-04-02 04:55:37

+0

標識符是否都是純字符串數據,還是它們是整數(或其他更簡單的類型)的字符串表示?儘可能避免通過字符串集合進行搜索。這樣你就不必處理區分大小寫,多餘的空白和其他類似的字符串問題。 – 2011-04-02 04:59:49

回答

1

嘗試:

var itemsAlreadyAdded = new int[] { 2, 4, 6 }; 
var newIds = new string[] { "2", "3" }; 

var itemsToAdd = newIds.Except(itemsAlreadyAdded.Select(iaa => iaa.ToString())); 

foreach (var item in itemsToAdd) 
{ 
    Console.WriteLine(item); 
} 

Console.ReadLine(); 
+0

thx爲Except語法。你給了我缺少的概念性部分,這是在Except()方法中創建「sub-Select」的能力,以便投影包含字符串。順便說一句,我也偶然發現了ConvertAll函數,因此在運行我的Except LINQ語法之前將我的字符串轉換爲整數是有幫助的。 Snipet看起來像這樣:'List ids = txtParticipants.Value ==「」? (列表)(): – sisdog 2011-04-05 17:37:59

0

你可以試試:

List<string> adds = newids.Where(id => !e.NetworkEvent.Any(e => e.NetworkID.ToString() == id)).ToList(); 
0

對於刪除,你可以使用! 「包含」 你只是做了。

對於添加,只需使用相同的表達,但反向(即反轉這兩個列表)。

換句話說:列表#1包含的東西在列表#2 ==>

  • 項列表#2從列表#1中刪除,或者在列表#2
  • 項目被插入以列表#1

所以你看到相同的表達式具有鏡像意義。

您也可以使用!存在或任何!代替!包含。