如题,例如:页面有2个条件控件,ID1,ID2,  C#代码如下:
  
  if((ID1.Value==1 || ID2.Value==2) && ID2.Value==2)
  {
       //do_something      
   }  if后面的条件是直接从数据库中取出的内容,在代码里如何直接用。  例如: string condition="(ID1.Value==1 || ID2.Value==2) && ID2.Value==2";
    if(方法(condition))
    {
        //do_something      
     }     这种方法如何实现呢?请高手帮忙

解决方案 »

  1.   

    public bool CheckUserExists(string username)
    {
        ...//数据库检索是否存在该用户名,从略
        int count=Convert.ToInt(cmd.ExecuteScalar());
       if(count>0){return true;}
       return true;
    }
    if(CheckUserExists(x))//x是你从控件或其他渠道取到的数据或用户输入的数据
      {
         //条件若成立 执行你想要执行的下续工作
      }
      

  2.   

    或者你可以把从数据库中取出的数据放到dateset中,用的时候直接从内存中拿,如ds.tables[0].Rows[i][j]
      

  3.   

    你的思路有问题,数据库里只需要存ID1和ID2这两个控件需要比较的值,也就是1和2
    其他的条件判断应该是代码里的事情.不过Anders Hejlsberg在PDC2008 Show过使用CSharpEvaluator动态解析并执行C#代码,只可惜到.Net4.0出来的时候这个class又不见踪影了
      

  4.   

    调用:
    object obj = ExecuteCode("1 == 2");
    if (obj == null)
        ret = "返回了null";
    else
        ret = obj.ToString();//Convert.ToString(        #region 执行静态代码
            /// <summary>
            /// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll、System.Web.dll 4个程序集)
            /// </summary>
            /// <param name="code">代码</param>
            /// <param name="arrReferencedAssemblies">要引用的程序集</param>
            /// <returns></returns>
            public static object ExecuteCode(string code, string[] arrReferencedAssemblies)
            {
                CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();            CompilerParameters objCompilerParameters = new CompilerParameters();
                objCompilerParameters.ReferencedAssemblies.Add("System.dll");       //引用dll 
                objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll");  //引用dll 
                objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll");   //引用dll 
                objCompilerParameters.ReferencedAssemblies.Add("System.Web.dll");   //引用dll 
                if (arrReferencedAssemblies != null)
                    foreach (string item in arrReferencedAssemblies)
                        objCompilerParameters.ReferencedAssemblies.Add(item);
                objCompilerParameters.GenerateExecutable = false;
                objCompilerParameters.GenerateInMemory = true;            CompilerResults cr = (objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters,
                new [] { GenerateCode(code) }));            if (cr.Errors.HasErrors)
                {
                    StringBuilder l_err = new StringBuilder("编译错误:");
                    foreach (CompilerError err in cr.Errors)
                    {
                        l_err.AppendLine(err.ErrorText);
                    }
                    return l_err.ToString();
                }
                // 通过反射,调用HelloWorld的实例 
                Assembly objAssembly = cr.CompiledAssembly;
                object objHelloWorld = objAssembly.CreateInstance("CommonOtherDynamicCodeGenerate.CommonOtherDynamicCodeGenerateClass");
                MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
                // 调用执行 
                return objMI.Invoke(objHelloWorld, null);
            }        /// <summary>
            /// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll 3个程序集)
            /// </summary>
            /// <param name="code"></param>
            /// <returns></returns>
            public static object ExecuteCode(string code)
            {
                return ExecuteCode(code, null);
            }        private static string GenerateCode(string code)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("using System;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Text;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.IO;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Data;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Xml;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Web;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Collections;");
                sb.Append(Environment.NewLine);
                sb.Append("using System.Collections.Generic;");
                sb.Append(Environment.NewLine);
                sb.Append("namespace CommonOtherDynamicCodeGenerate");
                sb.Append(Environment.NewLine);
                sb.Append("{");
                sb.Append(Environment.NewLine);
                sb.Append(" public class CommonOtherDynamicCodeGenerateClass");
                sb.Append(Environment.NewLine);
                sb.Append(" {");
                sb.Append(Environment.NewLine);
                sb.Append(" public object OutPut()");
                sb.Append(Environment.NewLine);
                sb.Append(" {");
                sb.Append(Environment.NewLine);
                sb.Append(" return " + code + ";");
                sb.Append(Environment.NewLine);
                sb.Append(" }");
                sb.Append(Environment.NewLine);
                sb.Append(" }");
                sb.Append(Environment.NewLine);
                sb.Append("}");            return sb.ToString();
            }
            #endregion
      

  5.   

    再认真看了下楼主的需求,确实很有问题
    从数据库取出的条件,却和要求引用当前Page实例里的控件这确实,需求很不合理
      

  6.   

    if(string.Equals("ID1.Value==1 || ID2.Value==2) && ID2.Value==2")){
     //do something??
    }
      

  7.   

    楼主可以了解下动态语言,如ironpython。专门针对你这种需要动态执行代码的需求设计的语言。
      

  8.   

    动态编译
    http://topic.csdn.net/u/20090531/21/8a99954c-c6ab-4a61-8356-071fbb020efa.html
      

  9.   

    ID1 ID2 是我模拟的控件 ,实际并不确定仅有这2个控件,而是多个控件,多个条件组合,多个被影响的控件。  这个在数据库里表现为一个字符串。
      

  10.   

    http://www.cnblogs.com/kingthy/archive/2007/12/15/995641.html
      

  11.   


    很好用啊,用JScript语法,哈哈,和C#差不多,强烈推荐。object o= Evaluator.EvalToObject("1==2");
    MessageBox.Show(o.ToString());