2017-02-01 18 views
0

私はIDに基づいてlinqで私のテーブルの2つを結合しようとしていますが、これまでunseccesfully。私は第1のテーブルと第2のテーブルからUserDetailsId、FocusStart、FocusEndとのisActiveから1つのビューWorkRoleId、ロール名、RoleDescriptionとたCompanyIdに取得しようとしていますlinqで2つのテーブルを結合するには?

public class WorkRole 
    { 

     public int WorkRoleId { get; set; } 
     public string RoleName { get; set; } 
     public string RoleDescription { get; set; } 
     public int CompanyId { get; set; } 
     public virtual Company Company { get; set; } 
     public virtual ICollection<WorkRolesUsersDetails> WorkRolesUsersDetails { get; set; } 
    } 



public class WorkRolesUsersDetails 
    { 

     public int WRUDId { get; set; } 

     public int? WorkRoleId { get; set; } 


     public string UserDetailsId { get; set; } 


     public virtual WorkRole WorkRole { get; set; } 

     public virtual UserDetails UserDetails { get; set; } 

     public DateTime FocusStart { get; set; } 
     public DateTime FocusEnd { get; set; } 

     public bool isActive { get; set; } 
    } 

:ここ

は私のモデルがどのように見えるかです。

私は私のアイデアを得た最も遠いました:

var query = db.WorkRoles.Join(db.WorkRolesUsersDetails,x => x.WorkRoleId,y => y.WorkRoleId,(x, y) => new { wr = x, wrud = y }); 

しかし、悲しいことに、それは動作しませんでした。私はちょうど十分なlinqを知らないし、ここで他の質問/答えの多くを得ることができませんでした。助けてください。

+0

あなたがdid'ntで働いた何を意味するか、任意の例外や予想される結果did'ntは来ましたの? –

答えて

2

コードは次のとおりです。

var list = db.WorkRoles. 
       Join(db.WorkRolesUsersDetails, 
       o => o.WorkRoleId, od => od.WorkRoleId, 
       (o, od) => new 
       { 
        WorkRoleId= o.WorkRoleId 
        RoleName= o.RoleName, 
        RoleDescription= o.RoleDescription, 
        CompanyId= o.CompanyId, 
        WRUDId= od.WRUDId, 
        UserDetailsId= od.UserDetailsId, 
        FocusStart=od.FocusStart, 
        FocusEnd=od.FocusEnd 
       }) 
1

EFを使用している場合は、Includesステートメントが驚異的に機能することがあります。外部キーが割り当てられている場合。それは基本的に他のデータを取得します。

static void Main(string[] args) 
{ 
    using (var context = new TesterEntities()) 
    { 
    var peopleOrders = context.tePerson.Include("teOrder").First(p => p.PersonId == 1).teOrder.ToList(); 
    peopleOrders.ForEach(x => Console.WriteLine($"{x.OrderId} {x.Description}")); 
    } 
} 

ナビゲーションコンテキストオプションなしで手動で組み合わせる。 2つのテーブルを結合するための

public class Student 
    { 
    public int StudentID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public List<StudentTestScore> Scores { get; set; } 
    } 

    public class StudentTestScore 
    { 
    public int StudentID { get; set; } 
    public int Score { get; set; } 
    } 

    class Program 
    { 

    static void Main(string[] args) 
    { 
     var students = new List<Student> 
     { 
     new Student { StudentID = 1, FirstName = "Brett", LastName = "X" }, 
     new Student { StudentID = 2, FirstName = "John", LastName = "X" } 
     }; 
     var grades = new List<StudentTestScore> { new StudentTestScore { StudentID = 1, Score = 98 } }; 

     var combined = students.Join(grades, x => x.StudentID, y => y.StudentID, 
       (x, y) => new 
       { 
        Student = $"{x.FirstName} {x.LastName}", 
        Grade = y.Score 
       }).ToList(); 

     combined.ForEach(x => Console.WriteLine($"{x.Student} {x.Grade}")); 

     Console.ReadLine(); 
    } 
+0

私の答えを見てください。私は同じ考えをしましたが、それがEFかLINQの問題かどうかは分かりませんでした。 – Michael

+0

私はあなたの例では表示されません結合オブジェクトのプロパティを取得していません。あなたは 'new {thing = x、thing2 = y}'をしません。あなたは '新しい{thing = x.PROPERTY、thing2 = y.PROPERTY}'をします。更新例を参照してください。 – djangojazz

関連する問題