2017-06-21 1 views
0

J'ai 3 tables jointes dans la déclaration ci-dessous:Comment fusionner si la ligne dans le tableau existe

var data = from x in dbContext.Base_Agencies 
        from u in dbContext.Base_AgencyInstances 
        from o in dbContext.Payment2Account_SecurityRuleAgencies 
        where u.AgencyId == x.AgencyId 
        where o.AgencyId == x.AgencyId 
        where u.AgencyInstanceId == param.AgencyInstanceId 
        select new RsSecurityParamsResult 
        { 
         AgencyId = x.AgencyId, 
         AgencyNameView = u.AgencyNameView, 
         Stamp = u.Stamp, 
         Pni = x.Pni, 
         Prefix = u.Prefix, 
         ServiceEnabled = o.ServiceEnabled, 
         DisabledDateTime = o.DisabledDateTime, 
         AmountHourTresholdWarning = o.AmountHourTresholdWarning, 
         AmountHourTresholdStop = o.AmountHourTresholdStop, 
         CountHourTresholdWarning = o.CountHourTresholdWarning, 
         CountHourTresholdStop = o.CountHourTresholdStop 
        }; 

Le problème est que dans certains exemples il n'y aura pas de suite pour l'agence dans la table « o » . Dans cette situation, je voudrais sélectionner des valeurs uniquement à partir d'autres tables, à l'exception de la table 'o'. Comment devrais-je faire ça?

+0

ce que vous entendez par * il n'y aura pas de suite pour l'agence dans la table « o » . *? – Rahul

+0

Situation lorsque: 1. dans le tableau 'x' il y a une ligne avec un certain agencyId, 2. dans le tableau 'u' il y a une ligne avec le même agencyId, 3. dans le tableau 'o' il n'y a pas de ligne avec le même agenceId –

+0

oui, vous voudrez peut-être vérifier la réponse posté – Rahul

Répondre

0

Je pense que vous voudrez peut-être faire un LEFT OUTER JOIN comme

var data = from x in dbContext.Base_Agencies 
        join u in dbContext.Base_AgencyInstances 
        on u.AgencyId == x.AgencyId 
        join o in dbContext.Payment2Account_SecurityRuleAgencies 
        on o.AgencyId == x.AgencyId into lrs 
        from lr in lrs.DefaultIfEmpty() 
        select new RsSecurityParamsResult 
        { 
         AgencyId = x.AgencyId, 
         AgencyNameView = u.AgencyNameView, 
         Stamp = u.Stamp, 
         Pni = x.Pni, 
         Prefix = u.Prefix, 
         ServiceEnabled = lr.ServiceEnabled ?? "Default", 
         ...... // other code similar ........ 
        }; 
+0

il ya quelques erreurs de syntaxe dans votre réponse, mais l'idée principale est correcte et cela m'a beaucoup aidé. –

0

solution correcte est:

var data = from x in dbContext.Base_Agencies 
        join u in dbContext.Base_AgencyInstances 
        on x.AgencyId equals u.AgencyId 
        join o in dbContext.Payment2Account_SecurityRuleAgencies 
        on x.AgencyId equals o.AgencyId into lrs 
        from lr in lrs.DefaultIfEmpty() 
        where u.AgencyInstanceId == param.AgencyInstanceId 

        select new RsSecurityParamsResult 
        { 
         AgencyId = x.AgencyId, 
         AgencyNameView = u.AgencyNameView, 
         Stamp = u.Stamp, 
         Pni = x.Pni, 
         Prefix = u.Prefix, 
         ServiceEnabled = lr.ServiceEnabled, 
         DisabledDateTime = lr.DisabledDateTime, 
         AmountHourTresholdWarning = lr.AmountHourTresholdWarning , 
         AmountHourTresholdStop = lr.AmountHourTresholdStop, 
         CountHourTresholdWarning = lr.CountHourTresholdWarning , 
         CountHourTresholdStop = lr.CountHourTresholdStop 
        };