2017-02-01 14 views
0

Я пытаюсь присоединиться к двум моим таблицам с linq на основе id, пока что нескромно.Как присоединиться к двум таблицам с linq?

Вот как мои модели выглядят:

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; } 
    } 

Я пытаюсь получить в одном представлении WorkRoleId, RoleName, RoleDescription и CompanyID из первой таблицы и UserDetailsId, FocusStart, FocusEnd и IsActive из второй таблицы.

Дальний я получил с моими идеями был:

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

Код для соединения 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}")); 
    } 
} 

Объединение вручную без возможности использования контекстной навигации.

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}». Вы DO DO 'new {thing = x.PROPERTY, thing2 = y.PROPERTY}'. См. Обновленный пример. – djangojazz

Смежные вопросы