2017-07-06 1 views
2

Hallo Ich entwickle Web-Anwendung in .net. Ich bin unten mit Szenario gekommen.Linq Links Join mit mehreren Tabellen

Unten ist meine erste Tabelle.

perm_levelid scrn_id perm_id perm_read perm_write 
40    1  2   1   1 
41    2  2   1   1 
42    3  2   1   1 

Unten ist meine zweite Tabelle.

scrn_id scrn_name 
1   UserProfile 
2   Change Password 
3   Dashboard 
4   Lease request 

Die Beziehung zwischen beiden obigen Tabelle scrn_id ist

Der Ausgang ich erwarte ist

scrn_id perm_id perm_read perm_write 
1   2   1  1 
2   2   1  1 
3   2   1  1 
4   0   0  0 

ich insgesamt 4 Zeilen im Ergebnis wollen. scrn_id 1,2,3 in beiden Tabellen übereinstimmen, so sollte ich erste Tabelle perm_read und perm_write Werte abrufen. Restwert aus 2. Tabelle möchte ich auch bekommen.

Ich versuchte wie folgt.

List<screendetails> obj = new List<screendetails>(); 
obj = (from c in db.rolsp_perm_levelmapping 
     join mapdetails in db.rolsp_scrn_screen on c.scrn_id equals mapdetails.scrn_id 
     into mapObj 
     from wt in mapObj.DefaultIfEmpty() 
     where c.perm_id== permisssionID 
     select new screendetails { 
      scrn_id=c.scrn_id, 
      scrn_name= wt.scrn_name, 
      Read=c.perm_read, 
      Write=c.perm_write 
}).ToList(); 
return obj; 

Die obige Abfrage liefert kein korrektes Ergebnis. Kann ich hier Abhilfe schaffen? Danke

+0

„* keine Erträge richtige Ergebnis *“ Sie das näher ausführen könnte? Was gibt es gerade zurück? –

+0

danke. Ich bekomme keine unübertroffenen Daten der zweiten Tabelle. –

Antwort

3
obj= (from scrn in db.rolsp_scrn_screen 
    from rmap in db.rolsp_perm_levelmapping 
    .Where(rl=>rl.scrn_id==scrn_id).DefaultIfEmpty() select new screendetails { 
         scrn_id=scrn.scrn_id, 
         scrn_name= scrn.scrn_name, 
         Read=rmap.perm_read, 
         Write=rmap.perm_write 
      }).ToList(); 

Versuchen Sie, diese mit ... Hoffe, das hilft ...

+0

Danke. Ich erhalte insgesamt 4 Datenzeilen unter Berücksichtigung des obigen Beispiels. Aber die vierte Zeile gibt mir wahr und wahr zurück, aber es sollte falsch sein, weil die vierte Zeile nicht mit der anderen Tabelle übereinstimmt. –

+0

Danke Manasa. Ich änderte das und begann zu arbeiten. Wo (c => c.perm_id == permisessionID) . Wo (rl => rl.scrn_id == scrn.scrn_id) .DefaultIfEmpty(). Danke für deine Hilfe –

+0

Ich argumentiere nicht, dass es nicht funktioniert, aber das ist ein hässlicher, schwer zu lesender Codeschnipsel. Nicht deine Schuld, es liegt an der Namenskonvention (Verletzung) s; aber dennoch :) – Flater