2011-06-08 43 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() 
       };