如何从字符串创建LINQ查询?

我是LINQ的新手,需要一些编码方面的帮助。

目前,我有一个字符串和一个var变量。

string temp = "from product in myEntities.Products where product.Name.Contains(_Name) select product"; var _Products = temp; LvProducts.DataSource = _Products; LvProducts.DataBind(); 

基本上,我想要做的是能够通过预先将其分配到字符串中来创建自定义/复杂的LINQ查询。 完成编写后,我将字符串分配给var变量。 但是,这显然是行不通的。 因此,任何人都可以帮助我吗?

你有几个选择:

  • 使用Dynamic Linq库可以动态构建查询。 入门的最佳地点是阅读ScottGu的博客文章 。 但是,我不认为这些库支持您的示例中的contains方法。 这是一篇博客文章,解释了如何添加此支持。

  • 直接执行SQL语句。 查看Linq to Sql或Linq to Entities的MSDN文档。

     var _Products = myEntities.ExecuteStoreQuery (@"SELECT * FROM Products WHERE [Name] In ('Item1', 'Item2')"); 
  • 使用Linq的可组合行为 。 这可能不是最优雅的解决方案,但如果您没有太多选项,它可以很好地工作。 您可以在多个部分构建查询。

     var _Products = from product in myEntities.Products select product _Products = from product in _Products where product.Name.Contains(_Name) select product if FilterByPrice { _Products = from product in _Products where product.Price > 100 select product } 

您可以通过使用CodeDomProvider – 在.NET应用程序中添加脚本function – 在某些c#中编译此Linq来实现此目的 – 但这是一个非常重要的解决方案。 如果你想看到更多关于如何做到这一点,那么看看LinqPad – http://www.linqpad.net – 作者邀请你使用反编译器看看它是如何工作的!

如果要求只是简单的条款,那么除了替代方案可能是使用Dynamic Linq之外 – 请参阅Scott Gu的post和Microsoft的示例代码 – http://weblogs.asp.net/scottgu/archive/2008/01/07 /dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

也许这可以帮助你http://nlinq.codeplex.com/

BR。

您首先使用LINQ的主要原因是获得编译器validation的查询,这将在编译时检测到错误。 这将破坏该目的,因为字符串将在运行时解析。

根据您的需求,您有两种选择:

1)进行eSQL查询并在ObjectContext上运行它。 使用此function,您仍然可以使用myEntities.Products等实体,并返回产品列表。

2)使用普通的SQL查询,并使用ObjectContext直接调用底层数据库。

我的猜测是你必须使用动态代码执行。 有关详细信息,请查看西风中的 Rickspost。

您将其视为动态SQL,您可以将该语句创建为字符串并将其解析为SQL语句。

由于您已经在代码中,为什么不在那里做出正确的陈述。 如果你使用Lambda而不是传统的linq,那将会容易得多。 我的2美分。