問題陳述修改LINQ查詢
說我有一個查詢,其搜索的人的名字:
var result = (from person in container.people select person)
.Where(p => p.Name.Contains(some_criterion)
這將轉換到包含像子句的SQL查詢:
WHERE NAME LIKE '%some_criterion%'
這有一些性能影響,因爲數據庫無法有效地使用名稱列上的索引(索引掃描v.s.索引如果我沒有弄錯)。
爲了解決這個問題,我可以決定只StartsWith()來代替,產生使用類似條款就像一個查詢:
WHERE NAME LIKE 'some_criterion%'
使SQL Server使用的索引查找和成本提供性能一些功能。
我希望能夠爲用戶提供一個選擇:默認使用StartsWith的行爲,但是如果用戶想要使用Contains()進行搜索的「增加的靈活性」,那麼應該使用這個選項。
有什麼我試圖
我以爲這是小事,並繼續實施對字符串的擴展方法。但是,當然,LINQ不接受這個,並拋出異常。
現在,我當然可以去使用if或switch語句併爲每個案例創建一個查詢,但我更願意解決這個問題「更高層次」或更一般化。 簡而言之:由於實際應用程序的複雜性,使用if語句來區分用例是不可行的。這會導致很多重複和混亂。我真的想以某種方式封裝不同的行爲(Contains,StartsWith,EndsWith)。
問題
我應該到什麼地方或者我應該怎麼找?這是與IQueryables組合的情況嗎?我很困惑!
Criterium。單數的標準。 – Oxymoron 2013-03-18 14:08:20
這將是「標準」。 – 2013-03-18 14:08:58
啊哈,好的。沒有意識到。過度規則適用於我自己的語言英語;) – Oxymoron 2013-03-18 14:10:45