2011-06-08 32 views
1

我有這樣的查詢,但它給了我錯誤的輸出。 我有兩個數據集合abcdata & & xyzdata。每個集合由具有Group,Name屬性的匿名對象組成。我需要做的是從abcdataxyzdata分別得到合併組合的結果集合。DataGrid中的數據重複。問題與LINQ查詢

if(this.AbcDataGrid.ItemsSource != null && this.XyzDataGrid.ItemsSource != null) 
{ 
     var abcdata = ((IEnumerable<dynamic>)this.AbcDataGrid.ItemsSource).ToList().OrderByDescending(x => x.Id); 
     var xyzdata = ((IEnumerable<dynamic>)this.XyzDataGrid.ItemsSource).ToList().OrderByDescending(x => x.Id); 

     var result = from i1 in abcdata 
        from i2 in xyzdata 
        select new 
        { 
         Name = i1.Name, 
         Group = i1.Group.ToString() + i2.Group.ToString() 
        }; 

     this.ResultGrid.ItemsSource = result.ToList(); 
    } 

當我期望得到的DataGrid填充新的{名稱,集團}對象的名單上有很奇怪的結果:enter image description here

+0

你能告訴我們預期的結果。它出什麼問題了 ?你知道你不把名單合在一起嗎? – 2011-06-08 00:30:12

回答

5

我相信,你正在嘗試做的是加入了數據收集。 您正在做的linq查詢返回正確的結果,因爲您所要求的結果是:對於abcdata的每個元素以及xyzdata的每個元素,返回正在構建的對象。所以,如果abcdata有3個元素,xyzdata有5個元素,結果將有15個元素。

如果您希望:對於abcdata的每個元素,選擇具有相同名稱的xyzdata元素並連接組,您需要的是Join。

喜歡的東西

var result = from i1 in abcdata 
       join i2 in xyzdata on i1.Name equals i2.Name 
       select new 
       { 
        Name = i1.Name, 
        Group = i1.Group.ToString() + i2.Group.ToString() 
       };