如何对具有2个数据表之间关系定义的数据表字段执行分组
本文关键字:数据表 定义 字段 执行 关系 之间 2个 | 更新日期: 2023-09-27 18:01:15
我有两个数据表,在数据集中有以下记录:
dtVariant:
Name Type status
Variant1 Add active
Variant2 Division active
dtSubVariant:
Name Type SubvariantName
Variant1 Add Sub1
Variant1 Add Sub2
Variant1 Add Sub3
Variant2 Division Sub1
Variant2 Division Sub2
Variant2 Division sub3
Variant2 Division sub4
现在,我想获得按变体类型列出的子变体列表,并且只获得那些状态为活动的变体,如下所示:
Add:Sub1,Sub2,Sub3
Division:Sub1,Sub2,Sub3,Sub4
在这里,我在这两个数据表之间建立了列Name and Type
之间的关系,如下所示:
Ds1.Relations.Add("MyRelation", dtVariant, dtSubVariant, false);
查询:
var data = (from c in Ds1.Tables["dtVariant"].AsEnumerable()
.where c.Field<string>("status")=="active"
group c by new { Type = c.Field<string>("Type") } into grp
select new
{
Type= grp.Key.Type,
Names=
from dp in c.GetChildRows("MyRelation")//Not getting this method
}).ToList();
但当我尝试这样做时:
from dp in c.GetChildRows("MyRelation") //i am not getting this GetChildRows method.
var result = Ds1.Tables["dtSubVariant"].AsEnumerable()
.GroupBy(i => i.Type)
.select(x=>new
{
Type= i.Key.Type,
SubVariantList=i.Select(x=>x.SubvariantName).ToArray()
}).ToList();
您在dtSubVariant
中拥有所有信息,可以使用此查询来获取。
这个东西就是linq构建的目的。。。
var result = Ds1.Tables["dtVariant"].AsEnumerable().GroupBy(i => i.Type);
您似乎没有正确设置关系,但如果没有它,可能会更快:
string[] activeTypes = Ds1.Tables["dtVariant"].Rows.Cast<DataRow>()
.Where(r => r["status"] == "active").Select(r => r["Type"] + "").ToArray();
var data = Ds1.Tables["dtSubVariant"].Rows.Cast<DataRow>()
.GroupBy(r => r["Type"] + "")
.Where(g => activeTypes.Contains(g.Key))
.Select(g => new {
Type = g.Key,
Names = g.ToList()
}).ToList();