为什么改用泛型查询找不到实例?
想让用户自定义别名。建了一个别名表(表名,字段名,别名),当用户查询实例列表后,然后找到这个表所对应的别名数据,分别填充到查询实例对应的实例的别名。不知还有没有更好的方法?
public class BusinessContainOfPaymentDal
{
/// <summary>
/// 获得数据列表(比DataSet效率高,推荐使用)
/// </summary>
public List<BusinessContainOfPaymentInfo> GetModelList(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select * ");
strSql.Append(" FROM View_业务对应的支付方式 ");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
strSql.Append(" ORDER BY 序号");
List<BusinessContainOfPaymentInfo> list = new List<BusinessContainOfPaymentInfo>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader dataReader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (dataReader.Read())
{
list.Add(ReaderBind(dataReader));
}
}
AssignValueToAlias(list, "SY支付方式");
//AssignValueToAlias<BusinessContainOfPaymentInfo>(list, "SY支付方式","名称");
return list;
}
/// <summary>
/// 指定值给别名
/// </summary>
/// <param name="?"></param>
public void AssignValueToAlias<T>(List<T> list, string tableName, string name)
{
AnotherNameDal dal = new AnotherNameDal();
List<BeautySalon.Model.AnotherNameInfo> _AnotherNameInfoList = dal.GetModelList(tableName);
foreach (T model in list)
{
PropertyInfo propertyInfo = model.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
//查询找不到值?
IEnumerable<AnotherNameInfo> anotherNameInfo =
from model2 in _AnotherNameInfoList
where model2.表名 == tableName && model2.字段名 == Convert.ToString(propertyInfo.GetValue(model, null))
select model2;
propertyInfo = model.GetType().GetProperty("别名", BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
foreach (AnotherNameInfo customer in anotherNameInfo)
{
propertyInfo.SetValue(model, customer.别名, null);
}
}
}
/// <summary>
/// 指定值给别名。这个方法是可以使用的
/// </summary>
/// <param name="?"></param>
public void AssignValueToAlias(List<BusinessContainOfPaymentInfo> list, string tableName)
{
AnotherNameDal dal = new AnotherNameDal();
List<BeautySalon.Model.AnotherNameInfo> _AnotherNameInfoList = dal.GetModelList(tableName);
foreach (BusinessContainOfPaymentInfo model in list)
{
IEnumerable<AnotherNameInfo> anotherNameInfo =
from model2 in _AnotherNameInfoList
where model2.表名 == tableName && model2.字段名 == model.名称
select model2;
foreach (AnotherNameInfo customer in anotherNameInfo)
{
model.别名 = customer.别名;
}
}
}
/// <summary>
/// 对象实体绑定数据
/// </summary>
private BusinessContainOfPaymentInfo ReaderBind(IDataReader dataReader)
{
BusinessContainOfPaymentInfo model = new BusinessContainOfPaymentInfo();
object ojb;
ojb = dataReader["业务编号"];
if (ojb != null && ojb != DBNull.Value)
{
model.业务编号 = (BusinessTypes)Enum.Parse(typeof(BusinessTypes), ojb.ToString());
}
model.业务名称 = dataReader["业务名称"].ToString();
model.支付方式编号 = dataReader["支付方式编号"].ToString();
model.名称 = dataReader["名称"].ToString();
ojb = dataReader["启用"];
if (ojb != null && ojb != DBNull.Value)
{
model.启用 =Convert.ToBoolean(ojb);
}
ojb = dataReader["现金业绩"];
if (ojb != null && ojb != DBNull.Value)
{
model.现金业绩 = Convert.ToBoolean(ojb);
}
ojb = dataReader["消耗业绩"];
if (ojb != null && ojb != DBNull.Value)
{
model.消耗业绩 =Convert.ToBoolean(ojb);
}
ojb = dataReader["系统默认"];
if (ojb != null && ojb != DBNull.Value)
{
model.系统默认 =Convert.ToBoolean(ojb);
}
ojb = dataReader["序号"];
if (ojb != null && ojb != DBNull.Value)
{
model.序号 =Convert.ToInt32(ojb);
}
model.备注 = dataReader["备注"].ToString();
ojb = dataReader["业务对应的支付方式Id"];
if (ojb != null && ojb != DBNull.Value)
{
model.业务对应的支付方式Id = new Guid(ojb.ToString());
}
return model;
}
}
...全文
相关推荐
C#泛型类、泛型方法、泛型接口、泛型委托的实例
泛型类、泛型方法、泛型接口、泛型委托 泛型类、泛型方法、泛型接口、泛型委托
Java让泛型实例化的方法
主要介绍了Java让泛型实例化的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
Java泛型实例
Java泛型,泛型接口、泛型方法实例
Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)
本人搜集的资料,看了这三篇,泛型彻底理解了。
Java泛型应用实例
网上很多讲泛型原理的文章, 很少有提到我们什么时候使用泛型有优势, 我就泛型类和方法搞了两个实例,算是探索下泛型使用的冰山一角吧,在我博客里面有配套的文章,可以配套看.



