我在数据集:
中有2个数据表,其中包含以下记录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.
答案 0 :(得分:2)
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
中的所有信息,您可以使用此查询来获取它。
答案 1 :(得分:1)
这个东西是linq为...而建的......
var result = Ds1.Tables["dtVariant"].AsEnumerable().GroupBy(i => i.Type);
答案 2 :(得分:1)
您似乎没有正确设置关系,但没有它可能会更快:
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();