2011-06-13 187 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