這可能是一個常見問題,而且我沒有找到可行的解決方案來搜索其他問題(注意,我的C#和linq技能是有限的 - 所以一個簡單的解決方案將不勝感激!)。C#比較兩個列表,返回列表2中的新項目
這裏是問題:
我有2列出了使用對象。我想比較它們並返回list2中的所有NEW對象。
實施例:
鏈表類的List1; //包含存儲在數據庫中的3個對象
ObjectList List2; //包含與List1中相同的3個對象以及從網頁添加的新對象(父對象已在網頁上更新)
ObjectList List3; //應該做一個比較列表1和列表2,並在列表2返回新的對象(所以結果應該只是對象數量4)
注:
- 的順序並不重要。我只想要新對象
- 通常,對象只能添加到List2中。如果任何對象被刪除(與List1比較),那麼這應該被忽略。 (這樣的對象,只有List1中存在不感興趣)
感謝您的任何建議或鏈接到以前的問題,我錯過了我的搜索
編輯
這裏是一個小例子首先嚐試使用Except(返回錯誤)
我縮短了一下。該方法來自我們的軟件,所以他們很可能不知道給你。對於那個很抱歉。
// caDialogObjects = List1 (caDialogQLMLinks is the link to the objects)
RepositoryObjectList caDialogObjects = args.Object.GetConfiguration().GetObjectSet(caDialogQLMLinks);
// caObjectObjects = List2 (caObjectQLMLinks is the link to the objects)
RepositoryObjectList caObjectObjects = args.Object.GetConfiguration().GetObjectSet(caObjectQLMLinks);
// List 3
RepositoryObjectList caTotal;
caTotal = caObjectObjects.Except(caDialogObjects);
解決方案奏效 例外沒有工作,因爲這份名單只是一個參考(不是值)。它可以使用第二個參數,但我得到了工作了LINQ代碼:
RepositoryObjectList caNewCA =
new RepositoryObjectList(caDialogObjects.Where(item1 =>
!caObjectObjects.Any(item2 => item1.Id == item2.Id)));
我喜歡這個比我的好:) – iain 2011-05-02 12:41:17
這也將是很好的提[除過載(http://msdn.microsoft.com/en-us/library/system.linq。 enumerable.except.aspx),它使用'IEqualityComparer'實例來比較元素。 – Groo 2011-05-02 12:43:17
嗨daniel.Thank你的答案。這實際上是我嘗試的解決方案之一。但是我得到錯誤「CAn不隱式轉換類型」RepositoryObject「tog」RepositoryObjectList「,這兩種類型都來自我們的軟件,但所有3個列表被聲明爲」RepositoryObjectList「 – Kim 2011-05-02 12:43:28