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

Sam*_*mmm 11 c# linq string var

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

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

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

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

Geo*_*ord 18

你有几个选择:

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

  • 直接执行SQL语句.查看Linq to SqlLinq to Entities的MSDN文档.

    var _Products = myEntities.ExecuteStoreQuery<Product>
    (@"SELECT * FROM Products WHERE [Name] In ('Item1', 'Item2')");
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用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
    }
    
    Run Code Online (Sandbox Code Playgroud)


Stu*_*art 8

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

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


Mar*_*gco -3

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

既然您已经在代码中,为什么不直接在其中编写语句呢?如果使用 Lambda 而不是传统的 linq,会容易很多。我的2美分。