繁体   English   中英

如何使用linq连接两个表?

[英]How to join two tables with 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不够了解,因此无法从这里获得其他问题/答案。 请帮忙。

连接两个表的代码是:

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

如果您使用的是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();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM