2013-10-21 56 views

回答

1

考慮添加一個擴展方法來SqlDataReader從給定的列讀取所有值,像這樣:

static IEnumerable<T> ReadColumn<T>(this SqlDataReader rdr, int index) { 
    while (rdr.Read()) { 
     yield return (T)rdr.GetValue(index); 
    } 
} 

有了這個方法,你應該能夠從您的查詢像這樣讀一列:

var i = 1; 
foreach (string name in cmd.ExecuteReader().ReadColumn<string>(1)) { 
    Console.WriteLine("Name {0} = {1}", i++, name); 
} 
+0

有用的信息。但是,是否有一種簡單的方法可以在沒有擴展方法的情況下執行? – Steam

+1

@blasto據我所知。我們公司在生產代碼中使用擴展方法,並且工作正常。 – dasblinkenlight

+0

更簡單的方法 - DataTable dt =一些數據表; DataColumn col = dt.Columns [「ColumnYouWant」];使用http://beyondrelational.com/modules/2/blogs/106/posts/11133/ssis-reading-object-variable-in-script-task.aspx – Steam

1

你應該樹添加屬性的對象(例如,人):ID,姓名和地址

然後可以創建包含該類型的對象的列表。

例如:

List<Person> persons; 

var names = persons.Select(p => Name); 

你可以做所有三個屬性是相同的。

+0

實際上,結果集來自SQL查詢。我希望我的C#代碼能夠通過列迭代它。我正在尋找類似於http://beyondrelational.com/modules/2/blogs/106/posts/11133/ssis-reading-object-variable-in-script-task.aspx – Steam

+0

的答案,我只是編輯了這個問題。希望它現在更有意義。 – Steam

+0

如果您使用實體框架或類似的查詢您的數據庫,上述將工作。目前還不清楚你用什麼來查詢你的數據庫 – TGH