选择所有类型的员工,然后选择特定员工

时间:2019-03-14 07:54:06

标签: c# linq polymorphism

这是一种家庭作业,因此有人可以指导我(而不是回答)如何结合这两个LINQ查询。这是问题

  

使用LINQ将“列表”映射到匿名对象列表中,以更新PayrollSytem,其中每个对象都包含员工的姓名和收入。遇到BasePlusCommissionEmployee时,将基薪增加10%,而无需修改原始BasePlusCommissionEmployee对象。显示名称和收入。

到目前为止,我有这个

var model1 = employees.OfType<BasePlusCommissionEmployee>().Select(x => new
    {
        x.FirstName,
        x.LastName,
        Increased_salary=x.BaseSalary*=1.10M
    });

var model = employees.Select(x => new
    {
        x.FirstName,
        x.LastName,
        earning = x.Earnings()
    });

foreach (var item in model)
    {
        Console.WriteLine(item);
    }

该类的UML图为UML Diagram

因此,查询可以单独正常工作,但是有某种方法可以使其成为一个查询。如果需要其他任何代码,我会提供。

1 个答案:

答案 0 :(得分:1)

您可以使用匿名类中的三元运算符来简单地检查员工是否是基数加佣金员工。

employees.Select(x => new { 
    FirstName = x.FirstName,
    LastName = x.LastName,
    Salary = x is BasePlusCommissionEmployee ? (x as BasePlusCommissionEmployee).BaseSalary * 1.1M : x.Earnings()
}).ToList();