C# 有没有办法在林克做到这一点?

C# 有没有办法在林克做到这一点?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我通过entitiyframework检查数据库中的2个表格,得到一笔已经打印但尚未兑现的支票 我尝试过多个查询,但我对LINQ不是很有经验,也没有得到想要的结果,下面是我的一些实现 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 nul

我通过entitiyframework检查数据库中的2个表格,得到一笔已经打印但尚未兑现的支票

我尝试过多个查询,但我对LINQ不是很有经验,也没有得到想要的结果,下面是我的一些实现

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'
从dbo.ODC\u寄存器检查中选择总和(检查。检查金额)
左加入dbo.vw_BMO_每日兑现
在支票上。支票号码=兑现。支票号码
其中cashed.Id为空
检查日期<'2019-9-3'
这是我上次试的

    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);
var missing=来自Context.ODC_寄存器中的检查
其中(!Context.vw\u BMO\u Daily.where(ma=>Convert.ToInt32(ma.DCheckNo)=checks.Check\u Number&&checks.Check\u Date x.Check\u Amount);

我所需要的就是找到一种方法将其转换为LINQ查询,而SQL的直接翻译是可能的,也许使用
GroupJoin
将是一种更为LINQ友好的方法:

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();

有很多方法可以做到这一点,但是如果您为此创建一个视图(不包括检查日期),通常会有更好的性能,然后通过检查日期。对于更复杂的联接尤其如此。请澄清您是如何检索数据的:您使用的是类似ORM的实体框架吗?哪一个?@ps2goat为什么它对性能更好?据我所知,视图不会影响性能,它们只是简化了实现?@ps2goat您如何构造不是这样的视图吗?你会选择check\u date,check\u amount,…`并在linq中进行分组/求和,还是使用窗口函数?@Liam然后你可以使用
.FromSql()
,查询计划缓存对视图来说不是唯一的,是吗?重点是“不要麻烦把它转到linq” @KieranDevlin@JavierPerez仅供参考,我将
.Count()==0
更改为
!…Any()
作为首选结构。
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();