#c# #linq
Вопрос:
var todate = Filters.Where(it => it.Value == "ApplicationDateToSearch").Select(it =>
{
if (DateTime.TryParse(it.Description, out DateTime ConvertedToDate))
{
it.Description = ConvertedToDate.AddHours(23).AddMinutes(59).AddSeconds(59).ToString();
}
})?.FirstOrDefault();
Visual Studio, похоже, это не нравится.
List<EmployeeRole> Filters
public class EmployeeRole
{
public String Description { get; set; }
public String Value { get; set; }
public int IntValue { get; set; }
}
Комментарии:
1. LINQ расшифровывается как «языковой интегрированный запрос», что означает, что он предназначен для получения данных. Можете ли вы назвать какую-либо причину, по которой вы хотите использовать его для внесения изменений? Кроме того,
List<T>
реализует.ForEach
метод, который вы могли бы использовать. В любом случае, «Visual Studio» это «не нравится», потому что ваша проекция (.Select
) ничего не возвращает.2. Определите «не нравится это». Ты забыл сделать
return it;
это послеif
?3. Кроме того, способ, которым вы добавляете часы, секунды и т. Д., Неверен (поскольку, например, он не будет обрабатывать один тик до полуночи). Не делай этого. Добавьте целый день и используйте
<
вместо<=
этого .4. В чем именно ваша проблема? Ваш
selector
не возвращает никакого значения. Компилятор не может построить это из-за неопределенного возвращаемого значения. Это никак не связано с изменением вашего экземпляра.return it;
как и последняя строка в вашей лямбде, это должно сработать.
Ответ №1:
Оператор «select» используется для выбора свойств, которые вы не можете изменить в этом, поэтому для этого вам необходимо использовать оператор «ForEach». Но оператор ‘ForEach’ не имеет никакого возвращаемого типа, поэтому после этого вы можете использовать FirstOrDefault
var x = Filters.Where(i => i.Value == "ApplicationDateToSearch").ToList();
x.ForEach(i => i.Description = DateTime.TryParse(i.Description, out DateTime ConvertedToDate) ? ConvertedToDate.AddHours(23).AddMinutes(59).AddSeconds(59).ToString() : string.Empty);
var todate = x.FirstOrDefault();
Комментарии:
1. «Если вы не хотите изменять существующий список, используйте вот так» — если вы имеете в виду сущности, то они будут изменены даже с использованием вашего примера кода.
2. Да, я согласен, что это изменит список данных, я изменю текст