如何在c#MVC3中执行字符串格式的LINQ查询
如何在C#中执行此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"];
提前感谢…编辑:此答案适用于原始问题内容,如何从字符串执行此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()";