c# - 无法让外部连接在 EF 中工作

标签 c# linq entity-framework linq-to-entities outer-join

没关系,我用 join/into 语法解决了它。也许这毕竟是必要的

我正在尝试让 Linq 外连接来对抗 EntitiyFramework。

public List<OSCDagbokDTO> FillDataForOSCDagbokSO(List<OSCDagbokDTO> oscdagboklista)
{
    var kalla_idn = oscdagboklista.Select(k => k.Kalla_id.GetGuidOrNull()).Distinct().ToList();
    var kallaLista = (from k in _gemensamEntityContext.Kalla
                      where kalla_idn.Contains(k.Kalla_id)
                      select new KallaDTO()
                      {
                          Kalla_id = k.Kalla_id,
                          KallaText = k.KallaText
                      }).ToList();

    var nyOSCDagbokLista = (from o in oscdagboklista
                            from k in kallaLista.DefaultIfEmpty()
                            where o.Kalla_id.GetGuidOrNull() == k.Kalla_id
                            select new OSCDagbokDTO()
                            {
                                Id = o.id,
                                Datum = o.Datum,
                                Enhet_id = o.Enhet_id,
                                Handelse = o.Handelse,
                                Kalla = k,
                                Kalla_id = o.Kalla_id,
                            }).ToList();
    return nyOSCDagbokLista;
}

第一个语句是从传入列表中的属性获取 ID 列表。

第二,从该列表创建 DTO 对象。

第三,使用(正如我所想的那样)外部联接从传入列表中获取所有项目,与 DTO 列表 (kallaLista) 联接。我正在使用 DefaultIfEmpty(),我认为它不会从传入列表中过滤掉项目,但它确实如此!

我没有使用“join”语法,因为我从各个站点了解到它,上面的语法应该没问题,而且我更喜欢它,尽管它更过时。

我错过了什么,为什么在使用 DefaultIfEmpty() 时传入列表中的项目在不在 DTO 列表中时被过滤掉?

最佳答案

我是否可以补充一点,如果存在从父实体到子集合的导航属性,则有一种非常简洁的方式来执行外部联接?

假设您有一个具有导航属性 kallaLista 的实体 OSCDagbok(我只是在猜测单数形式)。然后你可以这样做:

from o in oscdagboklista
from k in o.kallaLista.DefaultIfEmpty() // mind the "o."
select new OSCDagbokDTO()
...

如果没有,您可以按照您的解决方案进行操作。 intojoin 转换为 GroupJoin这是外连接的 linq 等价物。

关于c# - 无法让外部连接在 EF 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753163/

相关文章:

javascript - 使用 Angular 将表单发布到 ASP.NET MVC ActionMethod

c# - filesystemwatcher 作为 Windows 服务?

c# - 我如何为 json 属性返回 null 而不是 "data": []

c# - .Except/Yield 返回内存不足异常

c# - EntityFramework 6.0.0.0 读取数据,但不插入

asp.net - 为什么我必须在我的 UI 项目中引用 EF?

c# - 使用 LINQ to SQL 的简单 LINQ 查询,认为我做错了什么

c# - 有什么方法可以将方法绑定(bind)到 ListBox 的 DataTemplate 吗?

Web API Controller 方法的 LINQ 查询 JOIN 两个表

C# - 将 XML 节点值设置为来自 StreamReader 结果的 Stings