我是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变量。但是,这显然是行不通的。因此,任何人都可以帮助我吗?
答案 0 :(得分:18)
您有几个选择:
使用Dynamic Linq 用于构建查询的库 苍蝇最好的地方 开始是通过阅读ScottGu's blog entry。但是,我不这么认为 这些库支持包含 你的例子中的方法。 Here是 一篇博客文章解释了如何添加 这种支持。
直接执行SQL 语句。查看Linq to Sql或Linq 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美分。