EFCore的LINQ左外连接

问题描述 投票:1回答:2

我已经通过数以百计的例子看,仍然不能完全找到我要找的。

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但我想去的地方SignOffs == null || SignOffs.Count == 0选择所有CA。

它需要使用的方法的语法。另外,请记住,实际上有大约50在CA表与其他15对FK关系数据的列和签收表有数据的70列,它使用SQL Server 2017年。

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

编辑1:仅供参考,这是令人费解给我太多,但,这是它给我解释的方式。虽然试图解释这更好,我认为声明是一种新的方式。我需要选择没有签收记录,其中IsCurrentQtr是真正的所有CA。

c# sql-server linq entity-framework-core
2个回答
2
投票

我需要选择没有签收记录,其中IsCurrentQtr是真正的所有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();

0
投票

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

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

这会发现,没有关闭录制登录哪里是当前QTR == true的CA。

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