2013-08-27 90 views
-4

我已經搜索了幾個例子,沒有找到類似於我擁有的和我想要實現的例子。列表<object>比較

我有2所列出

class object1 
{ 
    string obj1_name; 
    int obj1_qty; 
} 
List<object1> listA 

class object2 
{ 
    string obj2_name; 
    int obj2_qty; 
} 
List<object2> listB; 

現在,使用利斯塔作爲主要的名單我想看看數組listB包含具有相同的名稱,如果是一個對象,什麼是數量,因此,莫非obj1_qty = obj2_qty彼此?如果不是這樣,那麼就有區別,我需要展示它,如果它們存在,最有可能在第三個列表中,這將是數量的差異。注意,利斯塔可以比數組listB

  • 顯示所有列表A(主列表中包含的所有對象)
  • 顯示那些存在於兩個列表中的名稱/數量的之間的差別更大或更小。

格拉西亞斯

+5

我建議你發佈你所到目前爲止已經試過。如果你沒有證明你已經做出了努力,沒有多少人願意爲你寫代碼。 –

+5

爲什麼你需要2個具有相同「成員」的類? –

+0

這兩個對象是否可以從暴露'Name'和'Qty'屬性的相同接口繼承?同樣,您的代碼不可兼容,可能會被關閉。請[編輯您的問題](http://stackoverflow.com/posts/18468317/edit),並至少提供完整的可編譯版本的類。 –

回答

2

做到這僅僅是使用來自LINQ的

聯接
var items = from l1 in listA 
      join l2tmp1 in listB on l1.obj1_name equals l2.obj2_name into l2tmp2 
      from l2 in l2tmp2.DefaultIfEmpty(); 
      select new { 
       ItemA = l1, 
       ItemB = l2, 
       Name = l1.obj1_name, 
       Difference = (l2 == null) ? 0 : l1.ob1_qty - l2.ob2_qty 
      }; 

items現在認爲,持有該項目的一參一匿名類的IEnumerable的simpelest方式ListA,對listB中項目的引用,匹配的名稱和差異。

+0

以上的用戶感興趣。所以如果他確實使用了界面,你會使用什麼解決方案? – Servy

+1

一個自定義的IEqualityComparer比較兩個然後使用...好吧,你是對的,一個接口不會幫助。我從我的答案中刪除了這部分。 –

+1

在處理這些數據時,一個接口可能會對其他問題有所幫助,但對於*這個特殊問題*無論它們是否實現相同的接口,Join都可能是最好/最簡單的。 – Servy

3

Souncs像加入會爲你工作:

var query = from a in listA 
      join b in listB on a.obj1_name equals b.obj2_name 
      where a.obj1_qty != b.obj2_qty 
      select new { 
       Name = a.obj1_name, 
       QtyA = a.obj1_qty, 
       QtyB = b.obj2_qty, 
       Diff = a.obj1_qty - b.obj2_qty 
       }; 
+0

您需要將'='替換爲你的'on' [with'equals'](http://msdn.microsoft.com/en-us/library/bb311040.aspx) –

+0

@ScottChamberlain總是忘記那部分 - 謝謝,修正。 –

+0

@DStanley。你錯過了一個.ToList()....請原諒我的無知 – Timujin