所以这里的重复的逻辑是代码:对各种对象
return new DistrictInfo {
rid = Convert.ToUInt32(((OracleNumber)o.GetOracleValue("rid")).Value),
doc = Convert.ToUInt16(((OracleNumber)o.GetOracleValue("doctor")).Value),
secdoc = Convert.ToUInt16(((OracleNumber)o.GetOracleValue("secdoctor")).Value),
num = Convert.ToUInt16(((OracleNumber)o.GetOracleValue("num")).Value),
docname = o.GetOracleValue("doctorname") as string,
slpuname = o.GetOracleValue("lpuname") as string,
reason = o.GetOracleValue("reason") as string,
secdocname = o.GetOracleValue("secdocname") as string
};
现在我需要重写这段代码做了检查对象的属性是否存在与否。这应该是这样的一段代码:
DistrictInfo di;
if (!(o["rid"].Equals(DBNull.Value)) && !(o.GetOracleValue("rid").Equals(DBNull.Value)) && (((OracleNumber)o.GetOracleValue("rid")).Value != null))
{
di.rid = Convert.ToUInt32(((OracleNumber)o.GetOracleValue("rid")).Value);
}
但我发现这个代码有些尴尬和不优雅。我做了很多检查,因为我想逃避例外。 所以问题是我们该如何重构这段代码?告诉我你的想法。我认为在这么多检查中是没有必要的。我们还需要指定各种对象属性名称来为所有品种成员执行一个代码块。我认为有能力为此使用LINQ。同样在第一段代码中,我们看到了不同的投射,所以我们需要在新代码中提及它。 在此先感谢你们!
P.S.用于处理数据库的库是devArt的dotConnect for Oracle。
提出你的方式来管理各种对象属性。它不仅限于LINQ。谢谢! – kseen
@kseen:1)什么类型的变量2)你可以使用.NET 4.0吗? – sll
[这是解释](http://www.devart.com/dotconnect/oracle/docs/Devart.Data.Oracle~Devart.Data.Oracle.OracleObject.html)。不,只有.NET Framework 3.5。但是如果有一些很好的功能,我们可以切换到.NET Framework 4.谢谢! – kseen