Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq左外部联接不返回结果_C#_Linq_Entity Framework 6 - Fatal编程技术网

C# Linq左外部联接不返回结果

C# Linq左外部联接不返回结果,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,我试图根据图片上的模型在两个表上执行左外连接 我正在使用以下linq查询: var query = from u in Context.Set<CpcUnidadProceso>() join p in Context.Set<CpcParadasPrevistasUnidad>() on u.IdCpcUnidadesProceso equals p.IdCpcUnidadesProceso

我试图根据图片上的模型在两个表上执行左外连接

我正在使用以下linq查询:

var query = from u in Context.Set<CpcUnidadProceso>()
            join p in Context.Set<CpcParadasPrevistasUnidad>()
                on u.IdCpcUnidadesProceso equals p.IdCpcUnidadesProceso
                into g
            from result in g.DefaultIfEmpty()
            where u.RefineriaArea.IdTipoArea == filters.IdTipoArea &&
            (result.FechaParada >= filters.Fecha || result == null) && (result.FechaArranque <= filters.Fecha || result == null)
            select
                new CpcPrevisionParadasUnidadesDto
                {
                    IdCpcUnidadesProceso = u.IdCpcUnidadesProceso,
                    CodigoUnidadProceso = u.CodUnidadProceso,
                    DescripcionUnidadProceso = u.Nombre,
                    IdCpcPrevisionParadasUnidadesDto = result == null ? 0 : result.IdCpcParadasPrevistasUnidades,
                    FechaParada = result == null ? null : result.FechaParada,
                    FechaArranque = result == null ? null : result.FechaArranque,
                    Observaciones = result == null ? null : result.Observaciones
                };
var query=来自Context.Set()中的u
在Context.Set()中连接p
关于u.IdcpunidaDesproceso等于p.IdcpunidaDesproceso
进入g
从g.DefaultIfEmpty()中的结果
其中u.RefineriaArea.IdTipoArea==filters.IdTipoArea&&

(result.FechaParada>=filters.Fecha | | result==null)和&(result.FechaArranque我怀疑问题是由以下
条件引起的,其中
条件:

(result.FechaParada >= filters.Fecha || result == null) && (result.FechaArranque <= filters.Fecha || result == null)
更好的是,
左侧外部联接
右侧的过滤应该在联接之前执行(对于左侧联接或
内部联接
,实际上并不重要):

来自Context.Set()中的u
在Context.Set()中连接p

哪里(x=>x.FechaParada>=filters.Fecha&&x.FechaArranque=filters.Fecha&&FechaArranque你救了我一天。只需使用你答案的第一部分,它就像一个符咒。Thanks@IvanStoev但是在你答案的第二部分,你在哪里检查结果==null?@nam因为在进行连接之前已经应用了整个过滤器,所以没有不需要在where子句中检查result==null。基本上(right==null | | some_条件(right))仅当您在联接后使用
where
时才需要。@IvanStoev但是,在您的第二个解决方案中,我们不是忽略了左外联接的定义吗?在
where子句中,我们只取两边联接的行。@nam它仍然是左外联接。联接操作后应用筛选器的问题考虑到右侧可以为空,w/o有效地将左侧外部联接转换为内部联接。当预先应用右侧筛选器和执行左侧外部联接时,您可以在不需要空逻辑的情况下获得正确的结果。
(result == null || (result.FechaParada >= filters.Fecha && result.FechaArranque <= filters.Fecha))
from u in Context.Set<CpcUnidadProceso>()
join p in Context.Set<CpcParadasPrevistasUnidad>()
    .Where(x => x.FechaParada >= filters.Fecha && x.FechaArranque <= filters.Fecha)
on u.IdCpcUnidadesProceso equals p.IdCpcUnidadesProceso
into g
from result in g.DefaultIfEmpty()
where u.RefineriaArea.IdTipoArea == filters.IdTipoArea
// ...