Linq Left Outer Join - DefaultIfEmpty错误

Mar*_*lar 6 c# linq entity-framework

有一组设备类型,其中一些支持配置设置.我正在尝试获取所有设备类型和任何适用设置的列表.

此查询未获取没有DeviceParameters的设备.如果我添加.DefaultIfEmpty(),如下所示,我收到此错误:

"转换为值类型'Int64'失败,因为具体化值为null.结果类型的泛型参数或查询必须使用可空类型."

什么是DefaultIfEmpty的正确synatx?

            var Devices = from d in dc.DeviceTypes
                      join p in dc.DeviceParameters on d.TypeID equals p.TypeID into tmpTable
                      from items in tmpTable.DefaultIfEmpty()
                      group items by d.DeviceName into g
                      select new
                      {
                          DeviceName = g.Key,
                          settings = from s in g
                                     select new
                                     {
                                         ParamName = s.ParamName,
                                         Param1 = s.Param1,
                                         Param2 = s.Param2,
                                         Param3 = s.Param3
                                     }
                      };
Run Code Online (Sandbox Code Playgroud)

Fra*_*sco 4

如果您已经定义了外键关系,我认为解决方案非常简单,除非我遗漏了一些东西:

var Devices = dc.DeviceTypes
    .Select(p=>new 
        {
             DeviceName = p.DeviceName ,
             settings = p.DeviceParameters
                 .Select(q=>new
                 {
                     ParamName = p.ParamName,
                     Param1 = q.Param1,
                     Param2 = q.Param2,
                     Param3 = q.Param3
                 })
        });
Run Code Online (Sandbox Code Playgroud)

无论如何,我可能会这样进行设置:

settings = p.DeviceParameters.ToList()
Run Code Online (Sandbox Code Playgroud)