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);
}
如何在C#中执行此LINQ查询, 我只想运行查询并获得结果..
请帮帮我......
提前致谢...
答案 0 :(得分:1)
编辑:此答案适用于原始问题内容,如何从字符串中执行此LINQ表达式:
var expression = @"( from a in Assignments
where a.assignmentID == 1 && a.assignmentID == 4 )
select new AssignmentModel
{
Title = a.Title,
Description = a.Description
}).ToList()";
虽然这个答案应该适用于当前问题中生成的字符串,但只有你会注入db.contracts
而不是Assignments
,正如我在下面解释的那样。
使用编译类的替代方法@GekaLlaur建议将字符串编译为表达式树,在编译LINQ表达式时,这可能更合适。
在this SO post (Chosen Solution)中找到的解决方案看起来好像应该为您开箱即用,只使用var p = Expression.Parameter(typeof(List<AssignmentModel>), "Assignments");
来描述您的参数。我会用你的具体例子测试它,但我还没有库(linked here)。
答案 1 :(得分:1)
不要这样做。改为使用Predicate Builder!
简而言之,这是C#的一个很棒的实现: http://www.albahari.com/nutshell/predicatebuilder.aspx
谓词构建器使用名为linqkit的免费库: http://www.albahari.com/nutshell/linqkit.aspx
这是另一个解决这个主题以及整个过程如何运作的问题 How does PredicateBuilder work
答案 2 :(得分:0)
检查CodeDOM,它提供了以编程方式创建代码的能力
http://msdn.microsoft.com/en-gb/library/y2k85ax6.aspx
然后你可以用反射来执行它。
或者
您可以使用表达式树以编程方式生成代码。
这篇文章非常有用http://msdn.microsoft.com/en-us/library/vstudio/bb882637.aspx