У меня есть этот запрос LINQ:Как изменить только одно или два поля (-ов) в проекциях LINQ?
List<Customers> customers = customerManager.GetCustomers();
return customers.Select(i => new Customer {
FullName = i.FullName,
Birthday = i.Birthday,
Score = i.Score,
// Here, I've got more fields to fill
IsVip = DetermineVip(i.Score)
}).ToList();
Другими словами, я хочу только один или два поля списка клиентов, которые будут изменены в зависимости от состояния, в моем методе бизнеса. У меня есть два способа сделать это,
- Использование
for...each
цикла, к перебрать клиентов и изменить это поле (императивный подход) - Использование LINQ проекции (декларативный подход)
Есть ли любой метод, который будет использоваться в запросе LINQ, чтобы только изменить одно свойство в проекции? Например, что-то вроде:
return customers.Select(i => new Customer {
result = i // telling LINQ to fill other properties as it is
IsVip = DetermineVip(i.Score) // then modifying this one property
}).ToList();
Остерегайтесь делать это, хотя вам нужно быть осторожным. Например, если вы делаете 'customer.FullName + =" foo "', и вы в конечном итоге перечисляете коллекцию дважды, вы получите некоторые довольно интересные результаты. –