我必须编写一些使用LINQ来过滤某些记录的代码,比如说某些记录具有属性LessThan(或GreaterThan)的某些过滤值。问题是来自数据库的记录可以包含任何数字类型字段,并且应该考虑所有这些字段进行过滤。
例如,如果字段是 int ,那么我的过滤器代码看起来像
var filterValue = filter.Value; //Some Filter Value entered by user
var itemType = item.GetType().GetProperty(filter.Field).PropertyType; //Particular field type
var itemValue = item.GetType().GetProperty(filter.Field).GetValue(item, null); //field value (comes from database)
为了过滤说明 int 的记录,我使用类似这样的代码
switch (filter.Operator) { //filter operator for LessThan is lt
case "lt":
try {
if (itemType == typeof(int)) {
return (int)itemValue < int.Parse(filterValue);
}
else if (...) //Test for all other numeric types in c#
}
catch {
return false;
}
break;
}
上面的代码处理来自数据库的 int 类型字段。 else if(...)部分是我必须为所有其他数字类型编写的内容。任何想法,如何编写该部分而不用硬编码类型检查所有数字类型。