2016-05-29 4 views
5

Wie kann ich Links Join in Linq verwenden, dass ich SQL-Abfrage schreibe?Wie kann ich Left Join in Linq verwenden, die wir in SQL verwenden?

select 
    p.Name, p.Family, 
    E.EmployTypecode, E.employtypeName, E.EmplytyppeTye 
from 
    personnel as p 
left join 
    Employee as E on E.EmployTypecode = p.EmployTypecode 
+1

möglich Duplikat von [LEFT zu Entitäten in LINQ JOIN?] (Http://stackoverflow.com/questions/19356439/left-join-in-linq-to-entities) – TheUknown

Antwort

1

Verwenden Stichwort Join statt LEFT JOIN und es ist zwingend erforderlich "IN" Schlüsselwort und "DefaultIfEmpty()" Methode zu verwenden, als rechte Tabelle Nullwert zurückgibt.

var query = from p in personnel 
       join e in Employee on p.EmployTypecode equals e.EmployTypecode into t 
       from nt in t.DefaultIfEmpty() 
       orderby p.Name 

    select new 
    { 
     p.Name, p.Family, 
     EmployTypecode=(int?)nt.EmployTypecode, // To handle null value if Employtypecode is specified as not null in Employee table. 
     nt.employtypeName, nt.EmplytyppeTye 
    }.ToList(); 
+0

völlig wrong.how dies links beitreten? –

+0

OP hat nach linkem Join in Ihrem Fall gefragt, es ist tatsächlich innerer Join, so dass es nur die übereinstimmenden Ergebnisse nicht extra eins vom Personal auswählt, was der Zweck der linken Join ist.Sie ​​können https://msdn.microsoft.com/ sehen de-IN/Bibliothek/bb397895.aspx –

0

es wie folgt tun:

var query = 
from p in personnel 
join e in Employee 
    on p.EmployTypecode equals e.EmployTypecode 
into temp 
from j in temp.DefaultIfEmpty() 
select new 
{ 
    name = p.name, 
    family = p.family, 
    EmployTypecode = String.IsNullOrEmpty(j.EmployTypecode) ? "" : j.EmployTypecode, 
    ...... 
} 
0
var q=(
       from pd in dataContext.personnel 
       join od in dataContext.Employee 
        on pd.EmployTypecode equals od.EmployTypecode 
        into t 
       from rt in t.DefaultIfEmpty() 
       orderby pd.EmployTypecode 
       select new 
       { 
        EmployTypecode=(int?)rt.EmployTypecode, 
        pd.Name, 
        pd.Family, 
        rt.EmplytyppeTye 
       } 
     ).ToList(); 
0

Warum nicht SQL-Abfrage verwenden EF LIST zu konvertieren. In EF 6.1

Schreib

public class personnel 
    { 
     public String Name { get; set; } 
     public String Family { get; set; } 
     public String EmployTypecode { get; set; } 
     public String employtypeName { get; set; } 
     public String EmplytyppeTye { get; set; } 
    } 

List<personnel> personnels = dbentities.Database.SqlQuery<personnel>(@"select 
    p.Name, p.Family, 
    E.EmployTypecode, E.employtypeName, E.EmplytyppeTye 
from 
    personnel as p 
left join 
    Employee as E on E.EmployTypecode = p.EmployTypecode ").ToList();