2017-03-16 11 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

エンティティモデルでリレーションシップを定義することができます(また、これらのジョインを取り除くこともできます)。問題は通常、実際には一意の*識別子ではない主キー(Entity Frameworkが認識している)によって発生します。 –

+0

@GertArnoldもし私がedmxファイル内のリレーションシップを定義したら、スピードの問題のいくつかを解決しますか?私がそうすると、同じプライマリキーを共有しないので、インベントリと設定の間の関連付けを分割する必要があります。 – Cowmoogun

+0

@gertarnoldおっと、私はスピードを意味しなかった、私は重複を意味した。すべての行に約2-4の複製が取り出されています。 – Cowmoogun

答えて

0

誰でも好奇心旺盛であれば、私は、データセットになります知っている実体キーの2によって項目をグループ化することによって問題を解決することができました。

関連する問題