我有这样的查询,但它给我错误的输出。
我有两个数据收集abcdata
&& xyzdata
。每个集合由具有Group
,Name
属性的匿名对象组成。我需要做的是分别从abcdata
和xyzdata
获得具有合并组的结果集合。
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/