Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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 - Fatal编程技术网

C# 其中不包括在LINQ查询中

C# 其中不包括在LINQ查询中,c#,linq,entity-framework,C#,Linq,Entity Framework,今天我遇到了实体框架的问题。我不确定这是一个奇怪的错误还是我做错了什么。我已经在论坛上到处寻找任何可能的解决方案,但没有一个对我有效 我有以下LINQ查询: return (from sp in context.ServiceProviders.DefaultIfEmpty() join pl in context.Platforms on sp.Id equals pl.ServiceProviderId into innerPl from pl in innerPl.Defa

今天我遇到了实体框架的问题。我不确定这是一个奇怪的错误还是我做错了什么。我已经在论坛上到处寻找任何可能的解决方案,但没有一个对我有效

我有以下LINQ查询:

return (from sp in context.ServiceProviders.DefaultIfEmpty()
    join pl in context.Platforms on sp.Id equals pl.ServiceProviderId into innerPl
    from pl in innerPl.DefaultIfEmpty()
    join pp in context.Participants on pl.Id equals pp.PlatformId into innerPp
    from pp in innerPp.DefaultIfEmpty()
    join ps in context.Paymentsettlements on pp.Id equals ps.ParticipantId into innerPs
    from ps in innerPs.Where(ps => ps.ConfirmedOn.HasValue && ps.ExportDate.HasValue && !ps.StatisticsDate.HasValue).DefaultIfEmpty()
    select sp).Include(sp => sp.Environment)
                .Include(sp => sp.Platforms.Select(pl => pl.Participants.Select(pp => pp.Paymentsettlements.Select(ps => ps.Requester))))
                .Include(sp => sp.Platforms.Select(pl => pl.Participants.Select(pp => pp.Paymentsettlements.Select(ps => ps.Payer))))
                .ToList();
我要寻找的结果是,无论ServiceProvider中是否有对象,我总是获得ServiceProvider。我现在得到这个结果,但是我在查询中的位置没有被考虑进去。以下情况没有任何区别:

innerPs.Where(ps => ps.ConfirmedOn.HasValue && ps.ExportDate.HasValue && !ps.StatisticsDate.HasValue).DefaultIfEmpty()
如果StatisticsDate有一个值,那么这些Paymentsettlements也会在输出中给出

我已经尝试将WHERE语句放在context.paymentResolutions对象上

我希望任何人都能帮我解决这个问题

亲切问候,


Rob H

实际上,您正在进行左加入,然后选择服务提供商。在这里,您将获得所有提供商。然后包括所有子元素:选择sp.Includesp=>sp.Environment。这行不通。它将包括所有行

你真正能做的就是选择匿名类型,比如

select new {sp, ps }
不幸的是,在包含的对象中没有过滤的方法。包含是一种要么全有,要么全无的东西。 您可以阅读以下内容:


我终于提出了另一个骇人的解决方案。这是我的最终代码:

using (var context = new BetaalplatformContext())
        {
            var dienstverleners = context.Dienstverleners.Include(dv => dv.Omgeving)
                                                         .Include(dv => dv.Platformen)
                                                         .Include(dv => dv.Platformen.Select(pl => pl.Deelnemers))
                                                         .Include(dv => dv.Platformen.Select(pl => pl.Deelnemers.Select(dn => dn.Betaalregelingen)))
                                                         .Include(dv => dv.Platformen.Select(pl => pl.Deelnemers.Select(dn => dn.Betaalregelingen.Select(br => br.Aanvrager))))
                                                         .Include(dv => dv.Platformen.Select(pl => pl.Deelnemers.Select(dn => dn.Betaalregelingen.Select(br => br.Betaler))))
                                                         .ToList();

            dienstverleners.ForEach(
                dv => dv.Platformen.ForEach(
                    pl => pl.Deelnemers.ForEach(
                        dn => dn.Betaalregelingen = dn.Betaalregelingen
                            .Where(br2 => br2.BevestigdOp.HasValue && br2.ExportDatum.HasValue && !br2.StatistiekDatum.HasValue)
                            .ToList()
                        )
                    )
                );

            return dienstverleners;
        }

通过这种方式,我可以保持模型的完整性。我不喜欢使用匿名对象。

您需要左外连接吗?因为,您所做的是左连接。是的,我始终希望所有对象它只需过滤掉不符合WHERE子句要求的PaymentResolutions,但如果没有PaymentResolutions,我确实希望上面的对象不确定,但可能是因为延迟执行。尝试在where语句后添加.ToList。ie-innerPs.Whereps=>ps.ConfirmedOn.HasValue&&ps.ExportDate.HasValue&!ps.StatisticsDate.HasValue.ToList.DefaultIfEmptyThanks Ziv,我已经试过了。仍然在innerPs中从ps获得相同的结果Paymentsettlement对象,其中填充了StatisticsDate.from ps。ps=>ps,是否编译?你能试着把ps=>ps重新命名为其他名称吗?谢谢你的回答。我已经让它处理匿名对象,但我认为必须有一种方法来使用我的模型。