我有以下代码。所有 20 个对象似乎都可以正常创建。
然后第一个foreach
工作正常并遍历所有 20个。
使用的第二个示例linq
也工作得很好。
那么是否可以使用诸如 之类的属性仅针对其中一个对象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;
}
}