首页 新闻 会员 周边 捐助

.net 条件判断问题(急)

0
悬赏园豆:40 [已解决问题] 解决于 2010-08-11 10:43

现在有个实体类model 它有些属性比如:id,day,name

model  m=new model();

m.Day=111;

m.Name="333";

现在我有个条件 “day>10”  或者“ Name=“333”  ”是一个字符串的条件

程序要怎么判断我这实体类满足这条件

 

问题补充: 笨的方法是这实体先存到数据库,在读出来 DataRow rs对象 rs["day"]>10 这样判断 day数据库里的一个字段名称 他是那个字段不确定的,要通过截取字符串“day>10”来知道是那个字段 我现在这样写的 string str=截取条件获得字段名称如“day” 然后 if(rs[str] 这里运算也通过截取获得 值也是) 有什么方法直接用实体类做判断?
xmao-xmao的主页 xmao-xmao | 初学一级 | 园豆:69
提问于:2010-08-10 16:20
< >
分享
最佳答案
0

用正则表达式:

            Model model = new Model { Day = 111, Name = "3333" };

            // 匹配大于 100 的正整数。
            string dayPattern = @"^([2-9][0-9][0-9](\d+)?)|([1][0-9][1-9])|([1][0-9][0-9]\d+)|([1][1-9][0])$ ";
            Regex dayRegex = new Regex(dayPattern);
            if (dayRegex.IsMatch(model.Day.ToString()))
            {
            }

            // 匹配 333 字符串。
            string namePattern = @"^333$";
            Regex nameRegex = new Regex(namePattern);
            if (nameRegex.IsMatch(model.Name))
            {
            }

 

你的判断条件“day>10”  或者“ Name=“333”不会是从sql语句中摘出来的吧?

如果是的话,你可以在内存总构造一个DataTable,然后使用DataTable.Select,把你的查询语句填写进去就OK了。

收获园豆:40
Launcher | 高人七级 |园豆:45050 | 2010-08-10 16:58
5555...不是这意思,那个条件的值是不确定的,他就是一个字符串 "数据库的字段名称+比价符+值 " 格式如:“day>3” 也可能是 “day=1” 等。。。。 我想直接用实体类就判断他是否满足这条件
xmao-xmao | 园豆:69 (初学一级) | 2010-08-10 17:07
把实体转换成DataTable?
xmao-xmao | 园豆:69 (初学一级) | 2010-08-10 17:30
@︵尐_ヅ杰ˇ:那就把你的实体转换成DataTable,然后用Select,把你的条件填写进去就可以了。
Launcher | 园豆:45050 (高人七级) | 2010-08-10 18:01
我也这样想的,要怎么转啊,好像要用到反射,不会啊。。菜鸟一个
xmao-xmao | 园豆:69 (初学一级) | 2010-08-10 18:04
@︵尐_ヅ杰ˇ: Type modelType = typeof(Model); List<PropertyInfo> modelProperties = modelType.GetProperties().ToList(); DataTable dt = new DataTable("Models"); modelProperties.ForEach(o => dt.Columns.Add(new DataColumn(o.Name, o.PropertyType))); Model model = new Model { ID=1000,Day=24,Name="张山"}; DataRow row = dt.NewRow(); modelProperties.ForEach(o => row[o.Name] = o.GetValue(model, null)); dt.Rows.Add(row); DataRow[] resultRows = dt.Select("day > 10");
Launcher | 园豆:45050 (高人七级) | 2010-08-10 21:08
GetProperties().ToList(); 报错了,没这方法 vs2008 2.0
xmao-xmao | 园豆:69 (初学一级) | 2010-08-11 09:19
@︵尐_ヅ杰ˇ: Type modelType = typeof(Model); PropertyInfo[] modelProperties = modelType.GetProperties(); DataTable dt = new DataTable(modelType.Name); foreach (PropertyInfo modelProperty in modelProperties) { dt.Columns.Add(new DataColumn(modelProperty.Name, modelProperty.PropertyType)); } Model model = new Model(); model.ID = 1000; model.Day = 24; model.Name = "张山"; DataRow row = dt.NewRow(); foreach (PropertyInfo modelProperty in modelProperties) { row[modelProperty.Name] = modelProperty.GetValue(model, null); } dt.Rows.Add(row); DataRow[] resultRows = dt.Select("day > 10");
Launcher | 园豆:45050 (高人七级) | 2010-08-11 10:20
GetProperties().ToList() 报错,应该是你没引用 System.Linq 命名空间。我给你改了个foreach版本的。
Launcher | 园豆:45050 (高人七级) | 2010-08-11 10:22
其他回答(7)
0

你可以在实体类中用 get{}  set{} 读写器进行控制啊

迷. | 园豆:4 (初学一级) | 2010-08-10 16:24
0

model  m=new model();

if(tempStr ==“day>10” )

{

  //do something

}

else if(tempStr=="Name=\"333\"")

{

  //do something

}

jowo | 园豆:2834 (老鸟四级) | 2010-08-10 16:28
0

可以把问题描述清楚点么?

kyo-yo | 园豆:5587 (大侠五级) | 2010-08-10 16:29
做了些补充,我描述能力真差 T -T
支持(0) 反对(0) xmao-xmao | 园豆:69 (初学一级) | 2010-08-10 16:45
0

可以写个 验证 值范围的 Attribute 这样就可以重用。

HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-10 16:30
0
public List<Area> GetAreaListFindByParentID(string filter)
{
return GetAreaList().FindAll(
delegate(Area ar)
{
return ar.Area_FatherID == filter;
}
);
}

 

以上是查找List<Area>中父ID为传入条件的集合,谨供参考

应用场景:
http://www.cnblogs.com/downmoon/archive/2010/06/15/1758675.html

邀月 | 园豆:25475 (高人七级) | 2010-08-10 19:13
0

把实体类存储到 DataTable 中,然后用 DataTable.Select 来获取,Select 方法可以输入 sql 查询条件。

eaglet | 园豆:17139 (专家六级) | 2010-08-11 07:41
0

把数据查到DataTable里,然后序列化为泛型对象,再序列化的时候,把值截赋给实体类属性,再做你的判断。

Astar | 园豆:40805 (高人七级) | 2010-08-11 09:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册