簡體   English   中英

如何從字符串創建LINQ查詢?

[英]How to create LINQ Query from string?

我是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 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 } 

你可以通過在一些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

也許這可以幫助你http://nlinq.codeplex.com/

BR。

首先使用LINQ的主要原因是獲得編譯器驗證的查詢,這將在編譯時檢測錯誤。 這將破壞該目的,因為字符串將在運行時解析。

根據您的需求,您有兩種選擇:

1)進行eSQL查詢並在ObjectContext上運行它。 使用此功能,您仍然可以使用myEntities.Products等實體,並返回產品列表。

2)使用普通的SQL查詢,並使用ObjectContext直接調用底層數據庫。

我的猜測是你必須使用動態代碼執行。 有關詳細信息,請查看西風的 Ricks帖子。

您將其視為動態SQL,您可以將該語句創建為字符串並將其解析為SQL語句。

由於您已經在代碼中,為什么不在那里做出正確的陳述。 如果你使用Lambda而不是傳統的linq,那將會容易得多。 我的2美分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM