2014-01-08 4 views
3

Я хотел бы запросить базу данных и получить список категорий (которые я использую с помощью синтаксиса запроса Linq). Затем повторите этот список категорий для использования в моем коде C#. Кажется, это должно быть относительно легко, но пока я просто нахожу примеры отображения результатов в представлении. Как использовать результаты в коде?Итерация через список результатов LINQ

+0

Можете ли вы показать нам, что вы пробовали? Или, может быть, некоторый псевдокод, который отображает то, что вы пытаетесь достичь – Moeri

ответ

8

Вы можете просто использовать foreach:

foreach(var category in categories) 
{ 
    // do something with it 
} 

Если вы хотите, чтобы сохраняться его в коллекции в памяти для доступа к нему по индексу вы можете создать массив или список с помощью Enumerable.ToArray или Enumerable.ToList, например:

List<Category> categoryList = categories.ToList(); 

Теперь вы также можете отредактировать его.

categoryList[index] = otherCategory; 

или вы можете использовать for -loop вместо:

for(int index = 0; index < categoryList.Count; index++) 
{ 
    Category cat = categoryList[index]; 
    //do something 
} 
+0

Как перенести первый результат в переменную? Например, если бы я выполнял итерацию по массиву, это было бы: String myVar = Catigory [i] – user800426

+0

@ user800426 'string myVar = category;' –

+0

Я сделал что-то очень похожее - итерацию по результирующему набору выражения LINQ с циклом for , и мой босс сказал использовать LINQ в исходном выражении вместо цикла после выражения LINQ. – James

2

Просто, чтобы добавить другую альтернативу можно также использовать для цикла:

for(int i = 0; i < categories.Count(); i++) 
{ 
    var thisElement = categories.ElementAt(i); 
} 

Хотя чуть менее читаемым для циклы часто бывают немного быстрее (хотя это во многом зависит от базового типа вашего IEnumerable).

+2

Вы не должны использовать этот 'for'-loop в самом запросе. Вместо этого вы должны создать из него коллекцию. В противном случае вы выполняете запрос на каждой итерации (и на 'categories.Count()'). Поэтому, если 'categories' является запросом базы данных (и это так), вы выполняете его на каждой записи, которую возвращает запрос, чтобы перейти к элементу следующего индекса. –

+0

Спасибо за разъяснение! – Liath

3

Вы также можете добавить код в запросы Linq. Например:

var numbs = new int[] { 1, 2, 3, 4, 5, 6 }; 

numbs.Select(i => { 

    SomeMethod(i); 
    return i; 

}); 

Затем вы также можете выбрать новые результаты или изменить результаты и сохранить их в существующем массиве. Например

var numbs = new int[] { 1, 2, 3, 4, 5, 6 }; 

var multList = numbs.Select(i => { 

    var mult = MultiplyBy2(i); 
    Console.Write("New Number: " + mult); 
    return mult; 
}); 
Смежные вопросы