#c# #linq #polymorphism
#c# #linq #полиморфизм
Вопрос:
Это своего рода домашнее задание, поэтому кто-нибудь может подсказать мне (вместо ответа), как объединить эти два запроса LINQ. В этом вопрос
Обновите систему Payrolls с помощью LINQ, чтобы отобразить список в списке анонимных объектов, в котором каждый объект содержит имя сотрудника и заработок. При обнаружении 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);
}
Итак, запросы по отдельности работают нормально, но есть ли какой-нибудь способ сделать это одним запросом. Если потребуется какой-либо другой код, я его предоставлю.
Ответ №1:
Вы можете просто проверить, является ли сотрудник сотрудником base plus commission, используя троичный оператор внутри анонимного класса.
employees.Select(x => new {
FirstName = x.FirstName,
LastName = x.LastName,
Salary = x is BasePlusCommissionEmployee ? (x as BasePlusCommissionEmployee).BaseSalary * 1.1M : x.Earnings()
}).ToList();
Комментарии:
1. Извините, но я забыл упомянуть, что Employee — это абстрактный класс, поэтому у Employee нет свойства BaseSalary, только у Basepluscommision есть свойство BaseSalary
2. Что ж, спасибо за ответ, это сработало, но я хотел бы, чтобы вы направляли меня вместо ответа (ну, без сожалений). но все равно спасибо