需求:
数据库中存在两个表,一个表存信息类别,另一个存放信息
信息类别表按级别(level)分主类(0)和子类(1),信息从属子类下(子类主键),
用Linq语句实现主类下信息条数和子类下信息条数查询
思路:
信息属于子类,可以先用分组查询子类下信息的条数,再求和查询主类下子类条数的和。
实现:
先取得信息类别(Linq查询表,_RMSContainer代表ADO.NET实体数据模型):
var InfoClassList = from A in _RMSContainer.Info_Class
select new
{
A.PK,
A.Name,
A.Class_Level,
A.Parent_PK
};
计算信息子类的条数(用Linq分组查询):
var ChildCountList = from A in _RMSContainer.Info
group A by A.PK into G
select new
{
G.Key,
InfoCount = G.Count()
};
生成信息子类数据(用Join on语句):
var ChildList = from B in InfoClassList
where B.Class_Level == 1
join D in ChildCountList
on B.PK equals D.Key
select new
{
B.PK,
B.Name,
B.Class_Level,
B.Parent_PK,
D.InfoCount
};
计算信息主类的条数(Linq下Sum求和):
var ParentCountList = from E in ChildList
where E.Class_Level == 1
group E by E.PK into F
select new
{
F.Key,
InfoCount = F.Sum(E => E.InfoCount)
};
//生成主类的数据(用Join on语句):
var ParentList = from L in InfoClassList
where L.Class_Level == 0
join M in ParentCountList
on L.PK equals M.Key
select new
{
L.PK,
L.Name,
L.Class_Level,
L.Parent_PK,
M.InfoCount
};
合并主类子类集合(Linq的Union):
var ReturnList = ParentList.Union(ChildList);
得到的ReturnList 即我们想要的信息统计的集合
知识点:Linq查询表,Linq分组查询,Linq下Join on用法,Linq求和,Linq合并集合
作者:彭海松
出处:http://www.cnblogs.com/haisongvip/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。