无法从多个表执行 Linq 查询 mvc 4



我是linq的初学者,我正在尝试编写linq查询以从多个表中获取数据

IQueryable<ESSRequest> ESSRequest = from essrequest in db.ESSRequest
                                    join emps in db.HrEmpS on essrequest.HrEmp_no equals emps.HrEmp_no
                                    join emp in db.HrEmp on emps.Emp_no equals emp.Emp_no
                                    where essrequest.Next_Approval == user_id
                                    select new { essrequest, emp_name=emp.Emp_Name};

我得到以下错误

错误71无法隐式转换类型'System.Linq.IQUERABLE<匿名类型#2>'到'System.Linq.IQUERABLE<ESSCS.型号.ESSRequest>'。明确的转换存在(是否缺少铸造?)E: \MVC\ESSCS\ESSCS\Controllers\RequestController.cs 138 53 ESSCS

等式两边的类/对象的类型不相同。

左手边有:IQueryable<ESSRequest>

在右手边,您有一个匿名类型,您正在使用LINQ:select new { essrequest, emp_name=emp.Emp_Name}; 生成

两者必须是相同的类型。

IQueryable<ESSRequest> ESSRequest = from essrequest in db.ESSRequest
                                    join emps in db.HrEmpS on essrequest.HrEmp_no equals emps.HrEmp_no
                                    join emp in db.HrEmp on emps.Emp_no equals emp.Emp_no
                                    where essrequest.Next_Approval == user_id
                                    select essrequest;

然后,如果你需要匿名类型,你可以这样做,在上面linq之后使用这个:

var aType = ESSRequest.Select(s => new { Employee = (s), emp_name = s.Emp_Name });

然后你可以这样访问它:

foreach( var employee in aType)
{
var empNamefromObject = employee.Employee.Emp_Name;
var empName = employee.Emp_Name;
}

您正在创建一个匿名类型的查询,而不是变量中指定的实际类型。所以不是创建IQueryable<ESSRequest>,而是创建IQueryable<AnonymousTypeX>。相反,当您执行select时,在那里指定类型,或者在您的情况下,看起来您可以简单地选择essrequest。如果还希望包含Emp_name值,则必须使用匿名类型或创建另一个要使用的模型类。

IQueryable<ESSRequest> ESSRequest = from essrequest in db.ESSRequest
                                    join emps in db.HrEmpS on essrequest.HrEmp_no equals emps.HrEmp_no
                                    join emp in db.HrEmp on emps.Emp_no equals emp.Emp_no
                                    where essrequest.Next_Approval == user_id
                                    select essrequest;

或者,如果您需要Emp_Name的值,请创建一个类似这样的类:

private class RequestAndName
{
    public ESSRequest ESSRequest { get; set; }
    public string Emp_Name { get; set; }
}

并像这样填充:

IQueryable<RequestAndName> ESSRequest = from essrequest in db.ESSRequest
                                        join emps in db.HrEmpS on essrequest.HrEmp_no equals emps.HrEmp_no
                                        join emp in db.HrEmp on emps.Emp_no equals emp.Emp_no
                                        where essrequest.Next_Approval == user_id
                                        select new RequestAndName
                                        {
                                            ESSRequest = essrequest,
                                            Emp_Name = emp.Emp_Name
                                        };

最新更新