2011-08-03 50 views
2

LINQ有一些問題。在我的程序中,我生成一個SQL搜索查詢,如如何將動態生成的搜索條件傳遞給LINQ

select * from emp "where empId=1 and empname='abc'" 

(其中引用的文本是在我的代碼中生成的)。我可以將生成的「where empId ...」字符串文本傳遞給SQL查詢。

我想這樣做同樣的事情在LINQ - 我想這個字符串傳遞作爲搜索條件,即像

var employee=from a in Employee.AsEnumerable() 
      "where empId=1 and empname='abc'" 
       select a; 

這可能嗎?提前致謝。

回答

0
+2

我認爲這個答案會更有幫助,如果你從你的鏈接引用了相關部分,或者將它應用到OPs案例中。 – Jens

+0

@ Jens,你可以解釋一下簡單,不好意思,但我是新的LINQ –

+1

這是如何幫助OP獲取linq where子句的字符串? – Reniuz

0

這是相當困難的,除非你打算聘請:

  • 動態代碼編譯或
  • 你願意創建一個(非常複雜)分析器來分析查詢和調用各自的linq擴展方法

我個人對後者沒有經驗。至於前者,這有點棘手,如果你沒有做適當的緩存和安全檢查,可能會出現問題。可執行代碼注入非常危險。

我想你最好使用不同的方法來過濾使用類似Where()這樣的方法的內容,如果查詢的數量可以預先確定或者返回SQL,否則。通常,除非用戶手動輸入查詢,否則不需要執行此操作。

1

您可以使用基本查詢(在您的情況下爲Employee.AsEnumerable())並使用您用於生成字符串的邏輯來組成新查詢。例如:

if(/*your logic for generating the string "where empId=1" here*/) 
{ 
    query = query.Where(a.empId == 1); 
} 

if(/*your logic for generating the string "empname='abc'" here*/) 
{ 
    query = query.Where(a.empname == "abc"); 
} 

生成的查詢對象將包含組成的所有操作符。然而正如其他人所說,這在一般情況下並不是微不足道的。對於SQL字符串也不是微不足道的。如果你只需要生成幾個過濾器就可以工作,但如果你需要複雜的表達式,這將是一個問題。

相關問題