2012-11-22 152 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不是可空類型一番,但我們真的沒有太多目前的信息...)