繁体   English   中英

EFCore Linq左外部加入

[英]EFCore Linq Left Outer Join

我浏览了数百个示例,但仍然找不到我想要的东西。

public class CA
{
    public int Id {get;set;}
    public List<SignOff> SignOffs {get;set}
}

public class SignOff
{
    public int Id {get;set;}
    public int CAId {get;set;}
    public bool IsCurrentQtr {get;set;}
}

我目前有一个搜索功能,可以返回IQueryable<CA> qry 现在,我需要使用IQueryable<CA>并在IsCurrentQtr == true情况下IsCurrentQtr == true所有SignOffs的联接,但是然后我想在SignOffs == null || SignOffs.Count == 0选择所有CA。 SignOffs == null || SignOffs.Count == 0

它需要使用方法语法。 此外,请记住,CA表中实际上有大约50列数据与其他15个FK关系,而签核表中有大约70列数据,并且它使用的是SQL Server 2017。

有人可以帮我写这个linq查询吗?

编辑1:仅供参考,这也让我感到困惑,但这就是向我解释的方式。 在试图更好地解释这一点时,我想到了一种新的陈述方式。 我需要选择在IsCurrentQtr为true的情况下没有签收记录的所有CA。

我需要选择在IsCurrentQtr为true的情况下没有签收记录的所有CA。

然后,您的查询应如下所示:

var caList = db.CAs.Where(ca => ca.SignOffs.All(sf => sf.IsCurrentQtr == false)).ToList();

// or

var caList = db.CAs.Where(ca => ca.SignOffs.Count(sf => sf.IsCurrentQtr) == 0).ToList();

根据您的编辑,您想要这个结果。

var result = cs.Where(x => !x.Any(r => r.IsCurrentQtr));

这将在IsCurrentQtr == true的情况下查找所有没有签署记录的CA。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM