У меня есть List<Person>, где объект Person состоит из следующих элементов;
Id
Name
Age
School
Я хочу запросить этот список и сохранить Id и Age в List<int,int>.
Я знаю, что List<int,int> не может быть выполнен на C#, поэтому я обнаружил, что вместо него можно использовать Tuple<List<int,int>>.
List<Person> personList = _db.Persons.OrderBy(x=> x.Id == Id).ToList();
Tuple<List<int,int>> listOfIdandAge = personList.Select(r => r.Id).ToList();
Приведенный выше код не работает, поскольку я не могу сохранить Age в списке listOfIdandAge. Может ли кто-нибудь помочь мне разобраться в этом?
почему не Dictionary<int, int>?
не должно быть List <Tuple <int, int >>?
Вы хотите Tuple<List<int,int>> или List<Tuple<int,int>>?
Если идентификатор уникален, то @Rahul верен, вы ищете словарь.
Вы также можете использовать List <KeyValuePair <int, List >>, но Dictionary обычно лучше.





List<(int, int)> listOfIdAndAge = personList.Select(r => (r.Id, r.Age)).ToList();
Или на самом деле это C#, поэтому
var listOfIdAndAge = personList.Select(r => (r.Id, r.Age)).ToList();
Для удобного доступа:
var listOfIdAndAge = personList.Select(r => (id: r.Id, age: r.Age)).ToList();
var firstId = listOfIdAndAge.First().id;
var firstAge = listOfIdAndAge.First().age;
Я впервые вижу List<(int, int)> . Просто интересно, как получить из него значения?
List<(int, int)> ?? такой конструкции нет
@sharonHwk: (int, int) - это эквивалент Tuple<int,int>. Доступ к значениям осуществляется таким же образом (Item1, Item2)
@ Рахул: Есть в C# 7. Обратите внимание на главу «Кортежи значений». Это добавлено в .NET Framework 4.7 (Standard 2.0). Более старые версии должны включать определенную DLL для получения функций.
Item1, Item2 ... ItemN по умолчанию, но я также отредактировал свой ответ, добавив метки. ValueTuples - настоящая жемчужина :)
Итак, вместо var listOfIdAndAge я могу сказать Tuple<List<int,int>> listOfIdandAge или List<Tuple<int,int>>listOfIdAndAge . Я сбит с толку :-/
@ Рахул Это действительно так, доказательство здесь. Обратите внимание, что я использовал DateTime как простой способ получить доступ к двум свойствам типа int.
Первые две строчки будут работать с List<Tuple<int, int>>. Последний, с метками, работает только с ValueTuples, поэтому фактическим типом будет List<(int id, int age)>.
var или List<(int,int)> или List<ValueTuple<int,int>>@sharonHwk: Вам действительно нужно избегать Tuple<List<A,B>>. Кортежи имеют несколько полей (поэтому они существуют), но Tuple<List<A,B>> имеет только поле один (типа List<A,B>). Tuple<List<A,B>> не имеет синтаксического смысла. Вам нужен список предметов (List<MyItem>), где каждый элемент списка - это Tuple<int,int>. Вам нужен список кортежей, а не кортеж списка.
Обратите внимание, что на самом деле нет причин использовать Tuple, если у вас есть доступ к C# 7.0 или выше. ValueTuples великолепны из-за этой способности маркировать: вы можете добавлять имена и фактическое значение к своим парам, тройкам и тому подобному, вместо использования неясных терминов Item1Item2ItemN.
ваш выбранный
r => r.Idдолжен вернуть кортеж.