开头是想做:我要查询条件都在T model里面,而所有数据都在List<T> ls里面,我想把ls里面满足条件的查询出来。因为解决不了,所以就拼接sql
class student { public string Id { set; get; } public string name { set; get; } public int age { get; set; } public double doub { get; set; } public DateTime dt { get; set; } public float floa { get; set; } } static void Main(string[] args) {
//这就是我要查询的条件,Id=1,name=zzj student s = new student { Id = "1", name = "zzj" }; string sql = SearchModel<student>(s); Console.WriteLine( sql ); } /// <summary> /// 按模型拼接sql,返回SQL语句 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="model"></param> /// <returns></returns> public static string SearchModel<T>(T model) { Type t = model.GetType(); string sb = string.Empty; PropertyInfo[] pi = t.GetProperties(); foreach (PropertyInfo p in pi) { if (p.GetValue(model , null) == null) break; sb += " and " + p.Name + "='" + p.GetValue(model , null) + "'"; } return sb; }
效果是:
and Id='1' and name='zzj' and age='0' and doub='0' and dt='0001/1/1 0:00:00' and floa='0'
请按任意键继续. . .
多种属性,他们的初始值不一样,各位大神我解决过这种问题没有?
defaut(T)可以帮你解决类型不同初始值不一样的问题。
get 谢谢
你问大神你解决过这种问题没有,大神也不知道啊,你解决没解决过,只有你自己知道啊。。。
大神 你不能水经验啊!
我想要的效果就是:如上 在ls集合中 查询 满足 T model (上里面有值的属性就是我要查询的条件:Id=1,name=zzj)
ha哈哈
问题是你是要多什么做查询?是对一个list做查询?那直接用linq不就好了'
如果是要数据库查询语句.那你这个不已经返回了?
比如上面学生模型里面有6个属性,如果里面5个属性有值的话,就是要查询那个5个属性的条件。如果要linq就要写死哪个属性(x=>x.?)。我想用泛型的话,就可以适应多种条件查询了,
@杰哥要学习了: 你没用过list.where吗?
@吴瑞祥: 我T model,是个泛型,list.where 里面要指定使用list中的某个属性啊。。。
@杰哥要学习了: 你都用反射写sql了.你就继续用反射做判断啊.
将条件构造成一个Expression
啊,果然初级