2017-03-16 103 views
0

我的查询出现了问题,我终于可以解决问题了,但是即使使用Distinct(),现在也会形成重复日期。我知道这些连接是混乱的,不幸的是这是我必须做的,因为我正在使用的表格之间没有任何关系。实体查询返回所有内容的重复记录

try 
      { 
       //work on query further , need to get client ID correctly 
       if (vehicleses.Count == 0) 
        return null; 
       string siteId = QueryExportSiteWithId(exportSiteId).SiteId; 
      //  db.Database.Log = Console.Write; 

       var joinedInventorySettings = await (from id in db.Inventory_Descriptions 
        join iv in db.Inventory_Vehicles 
        on new {client = id.ClientID, id = id.InventoryID} equals new {client = iv.ClientID, id = iv.ID} 
        into descGroup 
        from m in descGroup.DefaultIfEmpty() 
        join se in db.Settings_Exports 
        on m.ClientID equals se.ClientID into settingGroup 
        from sg in settingGroup.DefaultIfEmpty() 
        join sl in db.Settings_Lots 
        on new {client = m.ClientID, id = m.LotID} equals new {client = sl.ClientID, id = sl.ID} into 
        lotsGroup 
        from lg in lotsGroup.DefaultIfEmpty() 
        join ses in db.Settings_ExportSites on new {client = m.ClientID, lotId = m.LotID, site = siteId} 
        equals new {client = ses.ClientID, lotId = ses.LotID, site = ses.Site} into exportGroup 
        from eg in exportGroup.DefaultIfEmpty() 
        join ifs in db.Inventory_Features 
        on new {client = m.ClientID, id = m.ID} equals new {client = ifs.ClientID, id = ifs.InventoryID} 
        into invFeatGroup 
        from ifg in invFeatGroup.DefaultIfEmpty() 
        join ip in db.Inventory_Photos 
        on m.ID equals ip.InventoryID into photo 
        from photos in photo.DefaultIfEmpty() 
        where m.Archived != "1" 
          && m.Holding != "1" 
          && m.Status == "A" 
          && clientIdList.Contains(m.ClientID) 

        select new JoinedInventorySettings() 
        { 
         InventoryVehicles = m, 
         InventoryDescriptions = id, 
         SettingsExports = sg, 
         //InventoryPhotos = , 
         SettingsLots = lg, 
         InventoryFeatures = ifg, 
         SettingsExportSites = eg 
        }).Distinct().ToListAsync(); 

       if (joinedInventorySettings != null) 
       { 
        returnList.AddRange(joinedInventorySettings); 
        return returnList; 
       } 
       return null; 
      } 
+1

您可以(也应该)在您的实体模型中定义关系,以便您可以摆脱这些连接。您的问题通常是由主键(如实体框架已知)导致的,它们实际上并不是唯一的*标识符。 –

+0

@GertArnold如果我在edmx文件中定义关系,是否可以治愈我遇到的一些速度问题?看起来如果我这样做,我应该分开库存和设置之间的关联,因为它们不共享相同的主键,它们只共享一个。 – Cowmoogun

+0

@gertarnold哎呀,我不是说速度,我的意思是重复。每行有大约2-4个重复项被检索。 – Cowmoogun

回答

0

如果有人很好奇,我可以通过将两个我知道将在数据集中的实体键组合项来解决问题。