我用null
作为一个哨兵/旅行价值突破foreach:
public static DataTable ExecuteQuery(string sql)
{
var conn = new SqlConnection(EnvironmentVariables.GetDbConnectionString());
var adapter = new SqlDataAdapter(sql, conn);
var table = new DataTable();
adapter.Fill(table);
return table;
}
private VacantSummaryPage SelectPropertyFromDb(string sql)
{
VacantProperty vacantProperty = null;
List<VacantProperty> vacantProperties = GetProperties();
foreach (DataRow row in SqlServer.ExecuteQuery(sql).Rows)
{
vacantProperty = vacantProperties.Find(v => v.GetTitle().Contains(row["PartialStreetAddress"].ToString()));
if (vacantProperty != null) break;
}
vacantProperty.Select();
return new VacantSummaryPage(driver);
}
一旦vacantProperty
被匹配,它将不再为空,脱离循环和Select()
该属性,这就是它的作用。
您可以使用LINQ理解查询(类似于SQL的语法)编写“单行”指令:
private VacantSummaryPage SelectPropertyFromDb(string sql)
{
var query = from row in SqlServer.ExecuteQuery(sql).Rows.Cast<DataRow>()
from property in GetProperties()
where property.GetTitle().Contains(row["PartialStreetAddress"].ToString())
select property;
vacantProperty = query.FirstOrDefault();
if ( vacantProperty != null )
vacantProperty.Select();
return new VacantSummaryPage(driver);
}
First
如果未找到,则仅使用将引发异常,因此FirstOrDefault
可以控制未发现的情况,除非首选例外控制。
在这里查询本身被推迟,例如在调用First / FirstOrDefault或ToList()时对它进行评估。
很高兴知道
TypedTableBase使用DataSet中允许直接实现IEnumerable<DataRow>
,因此也强类型DataSet。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句