为什么改用泛型查询找不到实例?

flyingdream123 2013-06-27 05:42:29
想让用户自定义别名。建了一个别名表(表名,字段名,别名),当用户查询实例列表后,然后找到这个表所对应的别名数据,分别填充到查询实例对应的实例的别名。不知还有没有更好的方法?

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;
}

}
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingdream123 2013-06-28
  • 打赏
  • 举报
回复
调试过了数据没问题
effun 2013-06-28
  • 打赏
  • 举报
回复
调试一下看Convert.ToString(propertyInfo.GetValue(model, null))的返回值是什么,与数据库对比一下看看有没有问题。
flyingdream123 2013-06-28
  • 打赏
  • 举报
回复
没有人知道么?
effun 2013-06-28
  • 打赏
  • 举报
回复
盯着你的这段代码看了半个小时,楞是没有发现什么问题。两个方法的区别就在于一个是直接读写属性,而出问题的是通过反射。除了性能以外,应该是没有太大差别的。
exception92 2013-06-28
  • 打赏
  • 举报
回复
看你的BusinessContainOfPaymentInfo 这个类的代码??
  • 打赏
  • 举报
回复
会不会是加了别名 没有映射到对应的属性值?去掉别名看看 会不会好

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧