2017-01-30 6 views
0

Ich versuche, 3 Tabellen in einer Abfrage mit Linq beizutreten, um Daten von allen 3 Tabellen zu erhalten. Unten ist ein Bild der Tabellenschemata:Wie man 3 Tabellen mit linq verbindet

enter image description here

Die Abfrage wählen sollte: SewagePlantName, Company und Duty-

Außerdem muss ich die SewagePlantId auf eine Liste von Ids beschränkt, die als gegeben:

  var sewagePlantIds = UnitOfWork.GetAll<UserGroup>() 
      .Where(group => group.Id == webAppPrincipal.GroupId) 
      .SelectMany(group => group.SewagePlantId).Select(sewageplant => sewageplant.Id).ToList(); 

Ich habe Schwierigkeiten mit der Reihenfolge der Beitritt der 3 Tabellen und wo/wie die SewagePlantId auf die angegebene Liste zu beschränken.

Bitte helfen. Danke, Manu

+0

, dass ein schlechtes Design ist. Verwenden Sie * Relationen * zwischen den * Entitäten * und lassen Sie das ORM tun, was auch immer benötigt wird. 'SewagePlant' sollte ein' Company'-Eigentum haben. "Unternehmen" sollte eine "Aufgaben" -Sammlung haben. Laden Sie eine einzelne "Firma" und Sie erhalten Zugang zu allen verwandten Objekten –

+0

Aber in diesem Fall hat SewagePlant n Firmen und nicht umgekehrt. – Manu

+0

Also machen Sie es auch eine Sammlung. Miss * nur * dein ORM nicht. Erstellen Sie die richtigen Beziehungen, * versuchen Sie nicht, beizutreten, als ob Sie SQL verwenden würden. –

Antwort

5

Können Sie etwas Ähnliches wie es versuchen Sie es für Verbindungsteil

from d in Duty 
join c in Company on d.CompanyId equals c.id 
join s in SewagePlant on c.SewagePlantId equals s.id 
    .Select(m => new 
    { 
     duty = s.Duty.Duty, 
     CatId = s.Company.CompanyName, 
     SewagePlantName=s.SewagePlant.SewagePlantName 
     // other assignments 
    }); 
+0

Beim zweiten Join bekomme ich einen Fehler: -> Der Typ eines der Ausdrücke in der Join-Klausel ist falsch. Typ-Inferenz ist beim Aufruf von 'Join' fehlgeschlagen. – Manu

0
var obj = from trns in context.tblPartyRegistrations 
      join st in context.tblSellingTrans 
      on trns.PartyRegId equals st.Fk_PartyRegId 
      join pt in context.tblPartyRemainings 
      on trns.PartyRegId equals pt.fk_PartyId 
      select new 
      { 
       trns.Name, 
       trns.PhoneNo, 
       trns.Address, 
       st.RecivedAmount, 
       st.Date, 
       st.CustomerType, 
       st.MilkRate, 
       st.Mltr, 
       st.Mkg, 
       st.NtAmnt, 
       st.RemaningAmount, 
       pt.Remainingammount 
      }; 
Verwandte Themen