2012-11-22 154 views
0

如何访问循环外的变量?下面的代码似乎不起作用,变量是空的。foreach循环外的访问变量

var userID; 
foreach(var row in db.Query("SELECT ProviderUserId FROM webpages_OAuthMembership WHERE UserID = @0", currentUserId)) 
{ 
    userID = row.ProviderUserId; 

} 
var userID1 = userID; 
+2

'var userID;'如何编译? –

+1

代码有效,最后一个值userID被分配为空。 –

+0

如果我用字符串数组替换查询,它不会在我的机器上编译? –

回答

0

您的foreach循环回IEnumerable收集

var userID; 
foreach(var row in db.Query("SELECT ProviderUserId FROM webpages_OAuthMembership WHERE UserID = @0", currentUserId)) 
{ 
    userID = row.ProviderUserId; 

} 
var userID1 = userID; 

举办userID你可以做到这一点

List<string> userIDs = new List<string>(); 
foreach(var row in db.Query("SELECT ProviderUserId FROM webpages_OAuthMembership WHERE UserID = @0", currentUserId)) 
{ 
    userIDs.Add(row.ProviderUserId); 

} 
//Now You have items in userIDs List 
2

你想要哪个迭代从价值?首先?最后?如果没有结果会发生什么?

LINQ可能是一个更简单的方法在这里:

string sql = "SELECT ProviderUserId FROM webpages_OAuthMembership WHERE UserID = @0"; 
var userId = db.Query(sql, currentUserId) 
       .Select(x => x.ProviderUserId) 
       .SingleOrDefault(); 
if (userId != null) 
{ 
    ... 
} 

(当然这是行不通的,如果是是ProviderUserId不是可空类型一番,但我们真的没有太多目前的信息...)