2016-06-11 2 views
1

Ich habe das folgende Datenbankmodell, ich muss die Firma Entität für einen bestimmten Benutzernamen aus der Tabelle AspNetUsers abfragen. Ich kann nicht filtern und Drill in die verwandten hierarchischen Tabellen mit Linq Lambda-Ausdruck mit Entity Framework. Alle meine Domain-Klassen haben ihre Fremdschlüssel und Navigationseigenschaften erforderlich. Ich würde jede Hilfe zu schätzen wissen.Linq für ein hierarchisches Beziehungsmodell mit Entity Framework, Filtern geschachtelter Tabellen

enter image description here

Antwort

1

Aus meiner verstehe ich die Lösung gegeben. Ich hoffe, es kann dir helfen.

 //Test Data 

     DataTable Companies = new DataTable(); 
     Companies.Columns.Add("Companyid", typeof(string)); 
     Companies.Columns.Add("CompanyName", typeof(string)); 

     DataTable Teams = new DataTable(); 
     Teams.Columns.Add("Companyid", typeof(string)); 
     Teams.Columns.Add("TeamID", typeof(string)); 

     DataTable ApplicationUserTeam = new DataTable(); 
     ApplicationUserTeam.Columns.Add("TeamID", typeof(string)); 
     ApplicationUserTeam.Columns.Add("ApplicationUserID", typeof(string)); 

     DataTable AspnetUsers = new DataTable(); 
     AspnetUsers.Columns.Add("ID", typeof(string)); 
     AspnetUsers.Columns.Add("Name", typeof(string)); 

     Companies.Rows.Add("10", "Infosys"); 
     Companies.Rows.Add("12", "Tech mahindra"); 

     Teams.Rows.Add("10", "T18"); 
     Teams.Rows.Add("12", "T12"); 

     ApplicationUserTeam.Rows.Add("T10", "120"); 
     ApplicationUserTeam.Rows.Add("T12", "110"); 

     AspnetUsers.Rows.Add("110", "king"); 
     AspnetUsers.Rows.Add("112", "little"); 


     var id = AspnetUsers.AsEnumerable().Where(s => s.Field<string>("Name").Equals("king")).Select(s => s.Field<string>("ID")).First(); 
     var Teamid = ApplicationUserTeam.AsEnumerable().Where(s => s.Field<string>("ApplicationUserID").Equals(id)).Select(s => s.Field<string>("TeamID")).First(); 
     var Companyid = Teams.AsEnumerable().Where(s => s.Field<string>("TeamID").Equals(Teamid)).Select(s => s.Field<string>("Companyid")).First(); 
     var Company = Companies.AsEnumerable().Where(s => s.Field<string>("Companyid").Equals(Companyid)); 

     foreach (var item in Company) 
     { 
      Console.WriteLine(item[0] + " " + item[1]); 
     } 
+0

Dank sein. Diese Lösung funktioniert. Ich warte jedoch darauf, ob ich mit einem einzigen Linq-Ausdruck das gleiche Ergebnis erzielen kann. Vielleicht mit Any() -Methode für die Sammlungen. Ich bin mir nicht sicher. –

+0

Ich hoffe, dass Sie suchen – King

+0

var v = Companies.AsEnumerable() . Wo (c => c.Field ("CompanyID") == Teams.AsEnumerable() . Wo (t => t. Feld ("Mannschafts-ID") == ApplicationUserTeam.AsEnumerable() .Where (a => a.Field ("ApplicationUserID") == AspnetUsers.AsEnumerable(). Wo (u => u.Field (“ Name ") ==" König "). Wählen Sie (u => u.Feld (" ID ")). Zuerst()) . Wählen Sie (a => a.Field (" TeamID ")). Zuerst ()) .Wählen Sie (t => t.Field ("Companyid")). First()); – King

0

ohne Ihre Datenbank Kontext usw. zu wissen, wäre es so etwas wie

db.Comapnies.Include(c => c.Teams 
          .Select(t => t.ApplicationUserTeam 
             .Select(aut => aut.AspNetUsers))); 
+0

Ich möchte keine verwandten Entitäten einschließen, ich muss nur die Entität der Entität zurückgeben. Include wird immer alle verbundenen Entitäten einbeziehen. Ich dachte, Any() für die verwandten Entitäten zu verwenden, aber ich bin nicht sicher, wie der Linq-Ausdruck erstellt wird. –

Verwandte Themen