案列:数据库年龄设置为string,使用linq
查询时,查询大于5岁的人员,发现11岁的人员查不出来,
经过一番思考,想到了一个解决方案:
people.where(p=>(p.Val.CompareTo(Val) >= 0 && p.Val.Length == Val.Length) || p.Val.Length > Val.Length);
先使用 CompareTo
进行大小比较,再然后使用长度比较。只要数据库年龄字符串长度大于查询字符串长度,就视为符合条件。
等于比较 :
people.where(p=>p.Val.CompareTo(Val) = 0);
小于比较 :
people.where(p=>(p.Val.CompareTo(Val) < 0 && p.Val.Length == Val.Length) || p.Val.Length < Val.Length);
只适用于正数;
发现一个更简单的办法:
people.where(p=>Convert.ToDecimal(p.Val) > Convert.ToDecimal(val));
前提是数据库包括当前请求的值 只能为数字 否则会报错;