我有以下代碼。 所有20個對象似乎都創建好了。
第一個foreach
然後工作正常,遍歷全部20.
使用linq
的第二個例子很好地工作。使用IEnumerable時針對單個報告
然後,是否可以僅使用諸如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;
}
}
你避免像'(字符串)閱讀器[「ReportName」]''代碼的任何原因? –
models.First(i => i.ReportKey ==「YOUR-KEY-VALUE」)。RunThisReport(); – kingdango
@ ta.speot.is替換'reader.GetString(reader.GetOrdinal(「ReportName」))'? – whytheq