DataGrid中的数据重复。 LINQ查询问题

时间:2011-06-08 00:23:51

标签: c# wpf linq datagrid

我有这样的查询,但它给了我错误的输出。 我有两个数据集合abcdata&& xyzdata。每个集合都包含一个具有GroupName属性的匿名对象。我需要做的是分别从abcdataxyzdata获得包含合并组的结果集合。

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();
    }

虽然我期望使用新的{Name,Group}对象列表填充DataGrid,但我得到了非常奇怪的结果:enter image description here

1 个答案:

答案 0 :(得分: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()
                };