2017-12-26 6 views
0

Ich konnte nicht die Linq-Abfrage abrufen, Informationen aus verschiedenen Tabellen abrufen und es als Liste zurückgeben.ziehen Sie alle Daten mit Kundennummer

Zum Beispiel Kunden-ID >> 5, kann ich den Code in mssql schreiben:

SELECT * 
FROM  crm_customer_authorized AS AUTHORIZEDs 
INNER JOIN crm_authorized_describing AS authorized ON AUTHORIZEDs.authorizedId=authorized.authorizedId 
INNER JOIN crm_customer_describing AS customer ON customer.customerid = AUTHORIZEDs.customerid 
INNER JOIN crm_address_describing AS adress ON adress.customerid = customer.customerid 
INNER JOIN crm_customer_sector AS SEKTORS ON sektors.customerid = customer.customerid 
INNER JOIN crm_sector_describing AS sektor ON sektor.sektorid = sektors.sektorid 
INNER JOIN crm_customer_departman AS departments ON departments.customerid = customer.customerid 
INNER JOIN crm_branch_describing AS department ON department.departmentId= departments.departmentsId 
INNER JOIN address_codes_province AS province ON addresss.provinceid = province.addresscodeid 
INNER JOIN address_codes_provincece AS provincece ON addresss.provinceceid= provincece.section_code 
LEFT JOIN crm_position_describing AS POSITION ON authorized .positionId = position.positionid 

Ausgang: Result

Wie kann ich diese Abfrage mit Linq schreiben?

Ein Kunde hat mehr als eine Adresse, verantwortliche Person.
Eine verantwortliche Person, ein Kunde kann in dem gleichen Sektor sein, aber die Behörden sind anders.

Ich weiß nicht, den Code, wie mehr als eine unterschiedliche Informationen eines Kunden zur Liste

Ich habe die CustomerIDs aus der Kundentabelle

var customerIds = from cus in db.customerDescribing 
        select new { cus.customerId }; 

Ich wurde dann der Kunde s in der synchronisieren Adresstabelle

foreach (var item in customerIds) 
{ 
    var linq2 = (from address in db.addressDescribing.Where(x => x.customerId== item.customerId) 
       select new 
       { 
        Address = address.content, 
        CustomerId= address.customerId 
       }).ToArray(); 

} 

aber ich weiß nicht, wie mit anderen Tabellen zu halten Synchronisieren

+0

Zuerst Sie Beziehung zwischen diesen Klassen mit fließend API oder Attribut erstellen müssen. Sie haben also nur wenige Beziehungen zueinander. Anschließend können Sie die Abfrage-Syntax oder Methodensyntax zum Laden verwenden. Schließlich können Sie über Linq in Online-Seiten lernen, die über Linq Ausdrücke lehren. –

+0

@DragandDrop Ich hatte Probleme beim Laden von Bildern, also habe ich es auf eine andere Seite hochgeladen.Sie werden verstehen, was ich meine, wenn Sie auf das Bild schauen .. Vielen Dank für Ihr Interesse –

+0

@AminSaadati selamınaleyküm. Ich sah wie du gesagt hast, aber weil ich es nicht tun konnte, bat ich um Hilfe von hier. Ich schreibe hier nicht ohne Recherche. Danke für dein Interesse. –

Antwort

0

Sie Angenommen verwenden LINQ nicht Entities aber nur LINQ to SQL,

Für SQL LINQ zu übersetzen,

  1. Übersetzen Subselects als separate Variablen
  2. jede Klausel in LINQ-Klausel, um Übersetzen, so dass monadischen Operatoren (DISTINCT, TOP usw.) als Funktionen, die auf die gesamte LINQ-Abfrage angewendet werden.
  3. Verwenden Sie Tabellenaliasnamen als Bereichsvariablen. Verwenden Sie Spaltenaliase als anonyme Feldnamen.
  4. Verwenden anonyme Typen (new { }) für mehrere Spalten
  5. links wird durch die Verwendung einer Verknüpfung Variable und tun eine andere from aus der Variablen verbinden, gefolgt von .DefaultIfEmpty() Join simuliert.
  6. Ersetzen Sie COALESCE durch den bedingten Operator und einen Null-Test.
  7. SELECT * muss ersetzt werden mit select Bereichsvariable oder für join s, ein anonymes Objekt, das alle Bereichsvariablen enthält.
  8. SELECT flds muss ersetzt werden mit select new { ... } Erstellen eines anonymen Objekts mit allen gewünschten Feldern oder Ausdrücken.

Nach diesem Prozess auf Ihre Anfrage erhalte ich:

var ans = from AUTHORIZEDs in db.customerAuthorized 
      join authorized in db.authorizedDescribing on AUTHORIZEDs.authorizedId equals authorized.authorizeId 
      join customer in db.customerDescribing on AUTHORIZEDs.customerid equals customer.customerid 
      join adress in db.addressDescribing on customer.customerid equals adress.customerid 
      join SEKTORS in db.customerSector on customer.customerid equals SEKTORS.customerid 
      join sektor in db.sectorDescribing on SEKTORS.sektorid equals sektor.sektorid 
      join departments in db.customerDepartman on customer.customerid equals departments.customerid 
      join department in db.branchDescribing on departments.departmentsId equals department.departmentId 
      join province in db.addressCodesDrovince on adress.provinceid equals province.addresscodeid 
      join provincece in db.addressCodesProvincece on adress.provinceceid equals provincece.section_code 
      join POSITION in db.positionDescribing on authorized.positionId equals POSITION.positionid into POSITIONj 
      from POSITION in POSITIONj.DefaultIfEmpty() 
      select new { AUTHORIZEDs, authorized, customer, adress, SEKTORS, sektor, departments, department, province, provincece, POSITION }; 
+0

Tahnks! das ist, was ich will. dann werde ich die Ergebnisse mit foreach zurückgeben und den entsprechenden DTO werfen. –

Verwandte Themen