0

我正在创建一个 Employee 类对象的通用列表。

List<Employee> EmployeeList = new List<Employee>
{
new Employee { ecode=1, ename="Rohit", salary=20000, mgrid="3" },
new Employee { ecode=2, ename="Sangeeta", salary=12000, mgrid="5"},
new Employee { ecode=3, ename="Sanjay", salary=10000, mgrid="5"},
new Employee { ecode=4, ename="Arun", salary=25000, mgrid="3"},
new Employee { ecode=5, ename="Zaheer", salary=30000, mgrid=null}  
};

'mgrid'是经理的员工 ID。我只想增加经理的薪水。我尝试使用以下方法进行操作,但所有员工的工资都在增加。

var mgrsal =  from e1 in emplst
              join e2 in emplst
              on e1.ecode.ToString() equals e2.mgrid into empdata
              select new Employee
              {
                  ecode = e1.ecode,
                  ename=e1.ename,
                  salary=e1.salary*1.1,
                  mgrid = e1.mgrid
              };

我在 Visual Studio IDE 中使用 C#.net 进行编码,我也尝试使用 Contains() 和 Any() 方法,但无法使用。

4

1 回答 1

1

LINQ 是关于查询,而不是更新。您可以使用 LINQ 从列表中获取所有管理器,

var managers = from e in emplst
               where emplst.Any(x => x.mgrid == e.ecode.ToString())
               select e;

或使用JOIN(它需要在类上实现EqualsGetHashCode方法Employee才能Distinct工作:

var managers = (from e in emplst
               join e2 in emplst on e.ecode.ToString() equals e2.mgrid
               select e).Distinct();

然后迭代并更改薪水:

foreach(var manager in managers)
    manager.salary *= 1.1;
于 2013-07-14T09:56:33.150 回答