2011-06-13 92 views
0

大家 - 我有以下的一组对象:LINQ查询的复杂对象

User { String:Name, List<Devices> }
Device {String:Name, DeviceVariationInfo }
DeviceVariationInfo { String:OS }

在数据库中的对象被分为如下表: 用户,设备, DevieVariationsInfo,UserToDevices

我想查询设备的列表及其变化信息的某个用户,并使用以下查询总是返回Devices中的0个项目的列表。我敢肯定,我在这里做得不对.. =)

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(); 

     } 

    } 
+0

“我试图查询设备的丢失以及它们的变化信息” - 这是什么意思? – 2011-06-13 02:22:06

+0

另外,请注意deviesQuery将永远不会返回null。查询可能返回零结果,但查询对象本身不会为空。 – 2011-06-13 02:22:35

+0

修正了错字=) – OneDeveloper 2011-06-13 02:31:16

回答

0

有两点要注意:

是用户的一类?如果是这样,你为什么通过ref将它传递给GetUserDevices?除非你想改变该参考的含义,否则不要这样做。

另外,你为什么要这样做? User locUSer = user;

下面是我如何去调试你的问题:删除部分查询,直到你得到数据。例如,删除最后的连接语句,重新运行查询,并查看错误的位置。

+0

感谢您的回复,犹大。是的,'用户'是一个班级。我通过ref传递它的原因是因为我填充了该用户对象的设备列表。将它分配给局部变量的原因是因为ref变量不能在查询内部使用。 – OneDeveloper 2011-06-17 07:31:05

+0

如果你只是填充user.Devices,你不必'通过参考传递它。因为它是一个类,它会自动传入;修改它将修改您通过的东西。 – 2011-06-17 17:29:19

+0

您是否尝试删除某些连接以查明您的查询出错的位置? – 2011-06-17 17:39:59