Linq 将结果加入列表

Linq join result to List

这是一个 linq 内部联接,return是我想要的

 var innerJoinQuery =
                from employee in DbSet
                join department in DbContext.Set<Departments>() on employee.DepartmentID equals department.ID
                select new { ID = employee.ID, FirstName = employee.FirstName, LastName = employee.LastName, DepartmentID = employee.DepartmentID, DepartmentName = department.Name };


            List<Employees> innerjoinresult_as_employees_list = innerJoinQuery.AsEnumerable().Cast<Employees>().ToList();

员工模型是:

public class Employees
    {
        public int ID { get; set; }   

        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }

        public int DepartmentID { get; set; }

        [NotMapped]
        public string DepartmentName { get; set; }
    }

我的问题是我不能将 var innerJoinQuery 作为 List<Employees>,所以我可以 return 它。

有人知道怎么做吗?

如果我没理解错的话,您正在寻找一种方法将结果转换为 Employees 个实例的列表。

您可以通过更新 LINQ 语句的投影部分来实现。目前它投射到一个反义对象。你想投射到Employees类型

var innerjoinresult_as_employees_list =(from employee in DbSet
                                        join department in DbContext.Set<Departments>() 
                                        on employee.DepartmentID equals department.ID
                                        select new Employees { 
                                                   ID = employee.ID, 
                                                   FirstName =  employee.FirstName, 
                                                   LastName = employee.LastName,
                                                   DepartmentID = employee.DepartmentID, 
                                                   DepartmentName = department.Name }
                                        ).ToList();

结果(变量 innerjoinresult_as_employees_list 的值将是 Employees class 的列表)

您正在投影到匿名类型,而不是 Employee 对象。将您的查询更改为:

var innerJoinQuery =
    from employee in DbSet
    join department in DbContext.Set<Departments>()
        on employee.DepartmentID equals department.ID
    select new Employee { ID = employee.ID, 
                          FirstName = employee.FirstName, 
                          LastName = employee.LastName, 
                          DepartmentID = employee.DepartmentID, 
                          DepartmentName = department.Name 
                        };

List<Employees> innerjoinresult_as_employees_list = innerJoinQuery.ToList();

还没有测试过这个,但试试吧;您需要投影到正确的类型:

     var innerJoinQuery =
                (from employee in DbSet
                join department in DbContext.Set<Departments>() on employee.DepartmentID equals department.ID
                select new Employees{ ID = employee.ID, FirstName = employee.FirstName, LastName = employee.LastName, DepartmentID = employee.DepartmentID, DepartmentName = department.Name }).ToList();

List<Employees> employees = new List<Employees>(innerJoinQuery);