2013-11-22 72 views
0

我使用EF與Oracle數據庫連接,寫LINQ查詢這樣如何編寫LINQ生成SQL字符包含關鍵字

var keyword = this.Keywords.ToLower(); 
var filteredItems = from item in active_items 
        where item.Name.Contains(keyword) 
        select item; 

從LINQ生成的SQL利用像和關鍵字的包裹% %符號。

e.g. WHERE "EXTENT1"."NAME" LIKE '%keyword%' 

這似乎不錯,但我需要在SQL儘量使用「包含」關鍵字,並需要在SQL要像

e.g. WHERE CONTAINS(NAME,'keyword') > 0 

如何實現這一目標?

回答

1

第一種選擇: 使用devart庫:http://blog.devart.com/using-oracle-full-text-search-in-entity-framework.html

第二個選項: 使甲骨文接收您的關鍵字存儲過程和搜索它和程序映射到模型中(如果使用的是型號爲先)

第三個選項: 在linq映射中使用像INSTR這樣的函數。請參閱http://docs.oracle.com/cd/E11882_01/win.112/e18754/canonical_map.htm#ODPNT7777

+0

感謝丹尼爾:請您詳細說明第3個選項,因爲我可能無法實現選項1或2.如何使用像INSTR這樣的功能? – RRR

+0

Rahul,您必須添加對System.Data.Entity的引用並在您的查詢中調用EntityFunction.Contains。現在我沒有一臺Oracle機器來完成一個完整的示例,但您可以在這裏看到一個示例:http://msdn.microsoft.com/en-us/library/dd456873(v=vs.110).aspx 。我認爲你需要用於.NET的Oracle數據提供程序:http://www.oracle.com/technetwork/issue-archive/2011/11-sep/o51odt-453447.html – daniel

+0

我和第二個選項一起去了。然而,從EF調用Oracle中的存儲過程並不像在Microsoft SQL服務器中那麼簡單,而是通過我的方式實現。感謝您的建議。 – RRR

相關問題