2016-05-29 4 views
5

私はSQLクエリを書くLinqで左結合を使う方法はありますか?私はsqlで使用するlinqで左結合を使用できますか?

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

の可能複製[LEFTは、エンティティにLINQに参加?](http://stackoverflow.com/questions/19356439/left-join-in-linq-to-entities) – TheUknown

答えて

1

使用書き込み

EF 6.1では代わりに参加し、左のキーワードに参加して、右の表には、NULL値を返すようキーワードと「DefaultIfEmpty()」メソッド「INTO」を使用することは必須です。

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

全くこれはwrong.how左に参加する? –

+0

OPはあなたのケースでは左結合を求めていますが、実際には内結合であるため、左結合の目的である人員から余分なものを選択することはありません。https://msdn.microsoft.com/ en-IN/library/bb397895.aspx –

0

このようにそれを実行します。LISTにEFを変換するために、SQLクエリを使用していけないのはなぜ

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

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(); 
関連する問題