Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#MVC3中执行字符串格式的LINQ查询_C#_Asp.net Mvc_Linq To Sql - Fatal编程技术网

如何在c#MVC3中执行字符串格式的LINQ查询

如何在c#MVC3中执行字符串格式的LINQ查询,c#,asp.net-mvc,linq-to-sql,C#,Asp.net Mvc,Linq To Sql,如何在C#中执行此LINQ查询, 我只想运行查询并获得结果 请帮帮我 提前感谢…编辑:此答案适用于原始问题内容,如何从字符串执行此LINQ表达式: public ActionResult GenerateReport(FormCollection Form) { var type_id = Form["type_id"]; var Start_Date = Form["Start_Date"];

如何在C#中执行此LINQ查询, 我只想运行查询并获得结果

请帮帮我


提前感谢…

编辑:此答案适用于原始问题内容,如何从字符串执行此LINQ表达式:

     public ActionResult GenerateReport(FormCollection Form)
        {
            var type_id = Form["type_id"];           
            var Start_Date = Form["Start_Date"];

            StringBuilder sb = new StringBuilder();          
            sb.Append("db.contracts.Where(");
            if (!type_id.Equals(null))
            {
                sb.Append("a => a.type_id == type_id");
            }

            if (!Start_Date.Equals(null))
            {
                sb.Append("&& a => a.Start_Date == Start_Date");
            }
            sb.Append(");");
           //here I need to run the query!!
            return View(cm);
        }
虽然这个答案应该适用于当前问题中生成的字符串,但只有您将注入
db.contracts
,而不是
Assignments
,正如我下面解释的那样


使用@GekaLlaur建议的编译类的替代方法是将字符串编译到表达式树中,这在编译LINQ表达式时可能更合适


在中找到的解决方案看起来应该是现成的,只使用
var p=Expression.Parameter(typeof(List)。

不要这样做。改用谓词生成器

简而言之,下面是C#的一个很好的实现:

谓词生成器使用一个名为linqkit的免费库:

这是另一个关于这个话题的问题,以及整个事情是如何运作的

我很感兴趣的是你为什么要这样做?编辑后:你真的只想使用。@GertArnold,你可以在运行时使用C#CodeDom类编译字符串,你不必发出东西..参考GekaLlaur的答案(编辑太多,我的答案现在也不相关=()@Dead.Rabit是的,好吧,除非这是某种特殊的赋值,否则这两种方法都可能有点过头了。但我认为OP只是在寻找一种动态添加谓词的方法,因为查询的数据源部分在运行时是已知的(显然)。(顺便说一句,我删除了之前的注释:)GertArnold我认为你是对的,尽管我已经在@DimitarDimitrov上实现了这个特性好几次,但大多数都是在开发工具(例如内部日志页)中实现的,只是添加了一个注释,编译代码(任何代码)“从运行时的字符串”是安全漏洞的定义。请非常小心,确保任何解析的字符串都符合您的期望,并且不能在主机PC上运行。
var expression = @"( from a in Assignments
    where a.assignmentID == 1 && a.assignmentID == 4 )
    select new AssignmentModel
    {
        Title = a.Title,
        Description = a.Description
    }).ToList()";