复杂对象的Linq查询

复杂对象的Linq查询,linq,linq-to-sql,Linq,Linq To Sql,每个人-我有以下一组对象: User{String:Name,List} 设备{String:Name,DeviceVariationInfo} DeviceVariationInfo{String:OS} 在数据库中,这些对象被拆分为以下表: 用户、设备、DeviceVariationsInfo、UserToDevices 我试图查询某个用户的设备列表及其变化信息,并使用以下查询,它总是在设备中返回0个项目的列表。我很确定我在这里做错了什么……) 几点注意: 用户是一个类吗?如果是这样,为什么

每个人-我有以下一组对象:

User{String:Name,List}

设备{String:Name,DeviceVariationInfo}

DeviceVariationInfo{String:OS}

在数据库中,这些对象被拆分为以下表: 用户、设备、DeviceVariationsInfo、UserToDevices


我试图查询某个用户的设备列表及其变化信息,并使用以下查询,它总是在
设备中返回0个项目的列表。我很确定我在这里做错了什么……)

几点注意:

用户是一个类吗?如果是这样,为什么要通过
ref
将其传递到GetUserDevices?除非你想改变引用的含义,否则不要这样做

还有,你为什么要这么做<代码>用户蝗虫=用户


下面是我调试您的问题的方法:删除部分查询,直到返回数据。例如,删除最后一条join语句,重新运行查询,看看哪里出了问题。

“我正在尝试查询丢失的设备及其变体信息”——这意味着什么?另外,请注意DeviceQuery永远不会返回null。查询可能返回零结果,但查询对象本身永远不会为空。感谢您的回复,Juda。是的,‘User’是一个类。我通过ref传递它的原因是因为我填充了该用户对象的设备列表。我之所以将其分配给局部变量,是因为ref变量不能在查询中使用。如果您只是填写user.Devices,则不必通过ref传入。因为它是一个类,所以会自动通过ref传入;修改它将修改您传入的内容。您是否尝试删除一些连接以找出查询出错的地方?将其保留为ref参数有什么缺点?删除ref的原因与图形不应有多余的线和机器不应有多余的零件的原因相同。
 private void GetUserDevices(ref User user)
    {
        User locUSer = user; 

        if (user != null)
        {
            var deviesQuery = from dts in _dataConext.DB_UserToDevices
                              where dts.UserId == locUSer.Id
                              join ds in _dataConext.DB_Devices on dts.DeviceID equals ds.Id
                              join dsv in _dataConext.DB_DeviceVariations on ds.Id equals dsv.DeviceId
                              select new Device
                              {
                                  Version = ds.Version,
                                  VariationInfo = new DeviceVariation
                                  {
                                      OSVersion = dsv.OS
                                  },
                                  Name = ds.FriendlyName,
                                  Id = ds.Id
                              };

            if (deviesQuery != null)
                user.Devices = deviesQuery.ToList(); 

        }

    }