2014-01-08 43 views
3

我想查询数据库并获取类别列表(我正在使用Linq查询语法)。然后遍历该类别的列表以用于我的C#代码。这看起来应该是相对容易的,但到目前为止,我只是找到了在视图中显示结果的示例。如何在代码中使用结果?通过LINQ结果列表进行迭代

+0

你能告诉我们你试过了吗?或者可能是一些伪代码,显示你想要实现的内容 – Moeri

回答

8

您可以简单地用一个foreach

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

如果你要坚持它的内存中的集合通过索引来访问它,你可以创建通过Enumerable.ToArrayEnumerable.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

我做了一件非常相似的事情 - 用for循环迭代LINQ表达式的结果集,而我的老板说在LINQ表达式之后,在原始表达式中使用LINQ而不是循环。 – James

2

我想补充另一种选择,你也可以使用一个for循环:

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

虽然有点少读了循环通常要快得多(尽管它在很大程度上取决于IEnumerable的基础类型)。

+2

你不应该在查询本身上使用'for'''循环。相反,你应该从它创建一个集合。否则,你在每次迭代(和'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; 
});