2011-11-28 81 views
3

我想知道哪些是在LINQ中構建動態查詢的最佳方法。查詢將變得複雜並且嵌套。儘管搜索,我發現幾個方法:在c#中建立動態linq查詢的最佳方法?

  1. LINQ的動態(System.Linq.Dynamic)
  2. 阿爾巴哈利的謂詞器類
  3. Linq.Expression

有可能比這些更多的選擇。哪種方法最好?

+2

這實際上取決於您的要求。當然可以使用它們中的任何一個。請告訴我們更多你的意圖是 – Polity

+0

這可能有所幫助:http://stackoverflow.com/questions/1782577/what-is-the-best-approach-to-build-dynamic-linq-queries –

+0

@Polity :同意!但現在認爲需要構建基於Dynamic Linq的搜索引擎。所以這是最好的方法... –

回答

1

這取決於你的情況:你需要多快,你的起點是什麼,等等。在一個不受限制的世界裏,我認爲最好的辦法就是推出自己的圖書館來建立動態查詢。你可以使用斯科特或約瑟夫的作品作爲靈感,但最終它會在Linq.Expression庫中「落底」。

「自己動手」方法的一個優點是您不需要將代碼連接到某個人的框架。相反,您可以直接編寫.NET API。當你已經有了動態查詢的表示時,例如在通過UI呈現給用戶的模型中,在XML文件等中,這可能很有用。您所需要的只是遞歸地呈現該表示,並生成System .Linq.Expression作爲返回。

FWIW,我的公司在.NET 3.5推出時採取了這種方法,我們對結果非常滿意。

+0

當然,我打算爲此構建自己的庫。但截至目前需要優先考慮建立搜索引擎。我現在正在考慮快速使用現有的源代碼。我想知道哪個是最好的問題...任何更正和suggessions將appraciable ... –

+0

@RedSwan如果你需要快速構建的東西,Linq.Dynamic應該做的伎倆:[它可以讓你建立查詢字符串](http://stackoverflow.com/questions/848415/linq-dynamic-where-clause),所以你需要提供的是你的搜索條件的字符串表示。 – dasblinkenlight

-1

Linq查詢可以用兩種方式編寫,並讓您使用任何類型的嵌套。

查詢語法

IEnumerable<int> numQuery1 = 
     from num in numbers 
     where num % 2 == 0 
     orderby num 
     select num; 

方法語法

IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n); 

有關LINQ的更多信息,你可以訪問微軟的LINQ (Language-Integrated Query)。它包含從入門到示例教程的所有內容

+0

-1這與問題完全無關 – Jon

+0

@Pankaj:謝謝你回答Pankaj。事實上,你給出的答案實際上與問題無關。我想要搜索引擎。我知道如何使用orderby和其他子句,但不幸的是無法動態構建Linq查詢... –