首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在linq中做到这一点?

有没有办法在linq中做到这一点?
EN

Stack Overflow用户
提问于 2019-10-02 23:30:28
回答 1查看 156关注 0票数 1

我通过实体框架检查数据库中表中的2,从而获得已打印但尚未兑现的支票的总数

我已经尝试了多个查询,但我在LINQ中没有太多的经验,我没有得到想要的结果,下面是我的一些实现。

代码语言:javascript
复制
select sum(checks.Check_Amount) from dbo.ODC_Register checks
left join dbo.vw_BMO_Daily cashed
on checks.Check_Number = cashed.DCheckNo
where cashed.Id is null
and checks.Check_Date < '2019-9-3'

这是我上次试过的

代码语言:javascript
复制
    var missing = from checks in Context.ODC_Register
                          where(!Context.vw_BMO_Daily.Where(ma => Convert.ToInt32(ma.DCheckNo) == checks.Check_Number && checks.Check_Date <= ma.DatePosted).Any())
                          select new {checks.Check_Amount };

            var missingSum = missing.Sum( x => x.Check_Amount);

我所需要的就是找到一种方法,使其成为一个LINQ查询

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 06:08:40

虽然直接转换SQL是可能的,但使用GroupJoin可能是一种更友好的方法:

代码语言:javascript
复制
var ans = (from checks in Context.ODC_Register
           where checks.Check_Date < new DateTime(2019, 9, 3)
           join cashed in Context.vw_BMP_Daily on checks.Check_Number equals cashed.DCheckNo into cashedj
           where !cashedj.Any()
           select checks.Check_Amount).Sum();

PS不确定为什么ODC_Register的范围变量被命名为checks,因为它是为了一次一次检查-我称之为check

PPS在SQL和LINQ中,not exists测试通常比使用空的左连接更可取:

代码语言:javascript
复制
var an2 = (from checks in Context.ODC_Register
           where checks.Check_Date < new DateTime(2019, 9, 3)
           where !Context.vw_BMP_Daily.Any(cashed => cashed.DCheckNo == checks.Check_Number)
           select checks.Check_Amount).Sum();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58204714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档