Member 14800672 Ответов: 2

Как получить доступ к каждому элементу в foreach?


Когда мы пишем запрос с помощью linq
Тогда мы говорим:
Foreach (var x в запросе)
{
}
Допустим, запрос имеет Объект[0] и Объект[1], и каждый объект имеет разные значения полей

Что я уже пробовал:

Inside the for each i saw
X.elementAt(0). Fieldvalue but i don't want to specify 0 i want it take the current index of the for each... How can i
do this?  In order to get the correct result and not get the result of object 0 in each time

Maciej Los

Как выглядит ваш запрос?

Member 14800672

Таблица имеет поля Id1,Id1,Num1,Num2
var query = таблица
.Метод groupBy(х =>, новые { х.Типа id1, х.ID2, которое })
.Выберите(г =&ГТ; новый
{
Типа id1 = г.Ключ.Типа id1,
ID2, которое = г.Ключ.ID2, которое,
groupedBy = g

})
по каждому элементу (ВАР группы В запрос)
{
/ класс / число принимает два значения Double
Number number = новый номер(group.num1, group.num2); // я не могу добраться до num1 и num2
}

я пробовал это сделать но все равно у меня есть ошибка
группа.groupedBy.Выберите(x=> x.num1)
ошибка : не удается преобразовать из Ienumrable<double> В double

Member 14800672

я думаю, что мне нужно это сделать
Number number = новый номер(group.groupedBy.Первый().поля num1,группы.groupedBy.Первый().пит2);

кстати, в чем преимущество .Select, который я сделал в запросе? я все еще могу получить доступ к Id1 и Id2 без него.. в этом случае я поставлю группу.First().num1 или любое другое поле, так что когда я должен поставить .Выбрать в запросе?

2 Ответов

Рейтинг:
2

phil.o

У вас нет индексов в цикле foreach, вы можете использовать саму переменную:

foreach (var x in query)
{
   // the x variable is the current element
}

// is equivalent to

for (int i = 0; i < query.Count(); ++i)
{
   var x = query[i];
}

Если вам действительно нужен текущий индекс, то вы можете создать переменную и увеличить ее в цикле:
int index = -1;
foreach (var x in query)
{
   ++index;
   // ...
}


Member 14800672

Как я уже сказал,запрос имеет Объект[0], который имеет два поля Id=1, name =name1, а также Объект[1], который имеет Id=2, name=name2
Теперь, когда я пишу
Foreach(var x в запросе)
{
// я хочу сохранить имена
// x. что?
Строковое значение += x.
}

phil.o

string currentName = x.name;

BillWoodruff

+5

Рейтинг:
1

OriginalGriff

Вы не можете получить доступ к "индексу" a foreach, потому что он не обязательно имеет один - а foreach работает с итератором, и то, как это реализовано, зависит от самой коллекции, а не от интерфейса IEnumerable, который позволяет работать с коллекцией foreach

Если вам нужен индекс, то используйте a for петля вместо того, чтобы foreach и предоставьте индекс сами.