我有这样的查询,但它给我错误的输出。
我有两个数据收集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时,我得到的结果很奇怪:

最佳答案

我相信您要尝试做的是将两个数据收集都加入到一起。
您正在执行的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()
                };

关于c# - DataGrid中的数据重复。 LINQ查询问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6273023/

10-09 05:52