select tafsil,
SHtafsili,
SH_projeh,
sum(bed) as sumbed,
sum(bes) as sumbes,
sum(bed) - sum(bes) as sumbedbes,
sum(bes) - sum(bed) as sumbesbed
from SANAD
where tafsil > 0 group by tafsil, SHtafsili,SH_projeh HAVING sum(bed) > sum(bes)
我想把这段代码从ado.net转换成lambda。谢谢你的帮助
假设你有一个LINQ供应商,它给你一个 IQueryable<Sumbedbes>
或类似的东西,那么 喜欢:
var query = from row in source
where row.tafsil > 0
group row by new { row.tafsil, row.SHtafsili, row.SH_projeh }
into grp
where grp.Sum(g => g.bed) > grp.Sum(g => g.bes)
select new
{
grp.Key.tafsil,
grp.Key.SHtafsili,
grp.Key.SH_projeh,
sumbed = grp.Sum(g => g.bed),
sumbes = grp.Sum(g => g.bes),
sumbedbes = grp.Sum(g => g.bed) - grp.Sum(g => g.bes),
sumbesbed = grp.Sum(g => g.bes) - grp.Sum(g => g.bed),
};
你 可 得以 let
但这取决于查询提供者。
var query = from row in source
where row.tafsil > 0
group row by new { row.tafsil, row.SHtafsili, row.SH_projeh }
into grp
let sumbed = grp.Sum(g => g.bed)
let sumbes = grp.Sum(g => g.bes)
where sumbed > sumbes
select new
{
grp.Key.tafsil,
grp.Key.SHtafsili,
grp.Key.SH_projeh,
sumbed,
sumbes,
sumbedbes = sumbed - sumbes,
sumbesbed = sumbes - sumbed,
};
(老实说,最后两列完全是多余的)
然而,我无法强调这一点:我只想使用你已有的SQL。它是零风险的。很多 更加高效,而且你不需要问会生成什么查询。有了 "Dapper "这样的工具,只需使用你现有的sql进行查询就可以了。
var data = conn.Query<TheShape>(@"
select tafsil, SHtafsili, SH_projeh, sum(bed) as sumbed, sum(bes) as sumbes,
sum(bed) - sum(bes) as sumbedbes, sum(bes) - sum(bed) as sumbesbed
from SANAD where tafsil > 0
group by tafsil, SHtafsili,SH_projeh
HAVING sum(bed) > sum(bes)").AsList();
where TheShape
只是一个具有与返回数据匹配的属性定义的类型。