次のコードがあります。20 個のオブジェクトすべてが正常に作成されたようです。
最初
の例は問題なく動作 foreach
し、20 個すべてを繰り返し処理します。linq
のようなプロパティを使用して、オブジェクトの 1 つだけをターゲットにし、そのオブジェクトだけにReportKey
メソッドを実行することは可能RunThisReport
ですか? それとも、タイプを使用したためにIEnumerable<>
行き止まりになったのでしょうか。
static void Main(string[] args) {
var models = SelectReports("SELECT * FROM 20RecordTable");
//1.running the method for each
foreach(myReport x in models) {
Console.WriteLine("Doubled key:{0}", x.myReportKeyDoubled().ToString());
}
//2.linq sample
var result = from sample in models
select sample.ReportName;
foreach(string x in result) {
Console.WriteLine(Convert.ToString(x));
}
//3. target a single report say reportKey 512 and run the method RunThisReport?
Console.WriteLine("Press [enter] to exit");
Console.Read();
}
static IEnumerable<myReport> SelectReports(string myCommandText) {
var connectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
using(var conn = new SqlConnection(connectionString))
using(var cmd = conn.CreateCommand()) {
conn.Open();
cmd.CommandText = myCommandText;
using(var reader = cmd.ExecuteReader()) {
while(reader.Read()) {
yield return new myReport {
ReportKey = reader.GetInt32(reader.GetOrdinal("ReportKey")),
ReportName = reader.GetString(reader.GetOrdinal("ReportName")),
ReportDescription = reader.GetString(reader.GetOrdinal("ReportDescription")),
ReportTechDescription = reader.GetString(reader.GetOrdinal("ReportTechDescription "))
};
}
}
}
}
public class myReport {
public int ReportKey { get; set; }
public string ReportName { get; set; }
public string ReportDescription { get; set; }
public string ReportTechDescription { get; set; }
public int myReportKeyDoubled() {
return ReportKey*2;
}
public string RunThisReport(){
return this.ReportName + " needs to be run via" + this.ReportTechDescription;
}
}