如何将ado.net转换成lambda?

问题描述 投票:1回答:1
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。谢谢你的帮助

c# asp.net entity-framework lambda ado.net
1个回答
0
投票

假设你有一个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 只是一个具有与返回数据匹配的属性定义的类型。

© www.soinside.com 2019 - 2024. All rights reserved.