Ответ 1
listofIDs.Select(int.Parse).ToList()
Мой вопрос является частью этой проблемы:
Получаю коллекцию id из формы. Мне нужно получить ключи, преобразовать их в целые числа и выбрать соответствующие записи из БД.
[HttpPost]
public ActionResult Report(FormCollection collection)
{
var listofIDs = collection.AllKeys.ToList();
// List<string> to List<int>
List<Dinner> dinners = new List<Dinner>();
dinners= repository.GetDinners(listofIDs);
return View(dinners);
}
listofIDs.Select(int.Parse).ToList()
Использование Linq...
List<string> listofIDs = collection.AllKeys.ToList();
List<int> myStringList = listofIDs.Select(s => int.Parse(s)).ToList();
Вот безопасный вариант, который отфильтровывает недействительные целые:
List<int> ints = strings
.Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
.Where(n => n.HasValue)
.Select(n => n.Value)
.ToList();
Он использует новые переменные out
представленные в С# 7.0.
Этот другой вариант возвращает список пустых целочисленных значений, в которые вставляются null
записи для недопустимых целых чисел (т.е. он сохраняет исходный счетчик списка):
List<int?> nullableInts = strings
.Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
.ToList();
Использование Linq:
var intList = stringList.Select(s => Convert.ToInt32(s)).ToList()
Что нет TryParse? Безопасная версия LINQ, которая отфильтровывает недействительные целые числа (для С# 6.0 и ниже):
List<int> ints = strings
.Select(s => { int i; return int.TryParse(s, out i) ? i : (int?)null; })
.Where(i => i.HasValue)
.Select(i => i.Value)
.ToList();
Благодарим Оливье Жако-Дескомба за идею и версию С# 7.0.
Я знаю это старое сообщение, но я подумал, что это хорошее дополнение:
Вы можете использовать List<T>.ConvertAll<TOutput>
List<int> integers = strings.ConvertAll(s => Int32.Parse(s));
Это самый простой способ, я думаю:
var listOfStrings = (new [] { "4", "5", "6" }).ToList();
var listOfInts = listOfStrings.Select<string, int>(q => Convert.ToInt32(q));
Другой способ сделать это - использовать оператор linq. Рекомендованный ответ не работает для меня в .NetCore2.0. Я смог понять это, однако, и ниже будет работать, если вы используете более новую технологию.
[HttpPost]
public ActionResult Report(FormCollection collection)
{
var listofIDs = collection.ToList().Select(x => x.ToString());
List<Dinner> dinners = new List<Dinner>();
dinners = repository.GetDinners(listofIDs);
return View(dinners);
}
yourEnumList.Select(s => (int)s).ToList()
Вы можете использовать его через LINQ
var selectedEditionIds = input.SelectedEditionIds.Split(",").ToArray()
.Where(i => !string.IsNullOrWhiteSpace(i)
&& int.TryParse(i,out int validNumber))
.Select(x=>int.Parse(x)).ToList();
intList = Array.ConvertAll(stringList, int.Parse).ToList();
public List<int> ConvertStringListToIntList(List<string> list)
{
List<int> resultList = new List<int>();
for (int i = 0; i < list.Count; i++)
resultList.Add(Convert.ToInt32(list[i]));
return resultList;
}
list<int> integersList = decimalList.cast<int>().ToList()
если нулевым типом, то просто поместите '?' перед его типом, например
list<int?> integersList = decimalList.cast<int?>().ToList()