我有这样的查询,但它给了我错误的输出。
我有两个数据集合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,但我得到了非常奇怪的结果:
答案 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()
};