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

时间:2011-02-28 08:01:47

标签: 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();

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

6 个答案:

答案 0 :(得分:18)

您有几个选择:

  • 使用Dynamic Linq 用于构建查询的库 苍蝇最好的地方 开始是通过阅读ScottGu's blog entry。但是,我不这么认为 这些库支持包含 你的例子中的方法。 Here是 一篇博客文章解释了如何添加 这种支持。

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

    var _Products = myEntities.ExecuteStoreQuery<Product>
    (@"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
    }
    

答案 1 :(得分:8)

你可以通过使用CodeDomProvider - Adding scripting functionality to .NET applications在一些c#中编译这个Linq来实现这一点 - 但这是一个非常重量级的解决方案。如果您想了解更多有关如何执行此操作的信息,请查看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

答案 2 :(得分:3)

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

BR。

答案 3 :(得分:0)

首先使用LINQ的大部分原因是获得编译器验证的查询,这将在编译时检测错误。这将打败这个目的,因为字符串将在运行时解析。

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

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

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

答案 4 :(得分:0)

我的猜测是你必须使用动态代码执行。有关详细信息,请查看west-wind上的Ricks帖子。

答案 5 :(得分:-2)

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

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