【问题标题】:LINQ - Select complete object with join in entityframeworkLINQ - 选择完整的对象并加入实体框架
【发布时间】:2015-01-23 14:53:50
【问题描述】:

我有一个模型叫做雇员

[Table("tblemployee")]
public class Employee
{
   public int EmpID;
   public string EmpName;
   [NotMapped]
   public string EmpRole;
}

我有另一个角色模型

[Table("tblrole")]
public class Role
{
public int EmpID;
public string RoleName;
}

现在我想要一个员工的最终对象,它将 Role 类的 RoleName 设置为 Employee 类的 EmpRole。

var result =  from e in Context.Employee 
              join r in Context.Role on e.EmpID equals r.EmpID
              select new Employee {
              EmpID = e.EmpID,        
              EmpName = e.EmpName,
              EmpRole = r.RoleName
              };

在这里,我不想设置员工类的所有属性。我只想设置来自角色类的 emprole 属性。有没有其他方法可以让我一次选择完整的员工对象并且只设置 EmpRole 字段?请帮忙。

提前致谢

【问题讨论】:

    标签: linq entity-framework


    【解决方案1】:

    解决此问题的唯一方法是在表中同时选择 Employee 和角色,然后应用 ToList,然后在列表上应用 foreach 以在 Employee 对象中设置 EmpRole,然后从列表中选择该 Employee 对象。

    var result =  (from e in Context.Employee 
                  join r in Context.Role on e.EmpID equals r.EmpID
                  select new { Employee = e, Role = r}).ToList();
    
    result.ForEach(d => {d.Employee.EmpRole = d.Role.RoleName;});
    var finalResult = result.Select(d => d.Employee);
    

    【讨论】:

    • 感谢您的回复.. 但这会引发以下错误“LINQ to Entities 无法识别方法 'Employee.SetEmpRole(System.String)' 方法,并且此方法无法翻译成商店表达。”
    • 是的,它的工作.. 感谢 Jenish。但我担心的是性能。这种方法会比我的方法在性能方面落后吗? Bcoz 我认为使用 foreach 会消耗更多时间。
    • @Alicek 如果有大量数据,列表可能会出现性能问题,但 Linq to SQL 不提供在选择时更新实体的方法。我认为您提到的方式(select new Employee...)非常适合良好的性能。
    • 一篇文章为什么在更新对象时应该使用 foreach 而不是 LINQ 等效的 ForEachblogs.msdn.com/b/ericlippert/archive/2009/05/18/…
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多