2012-05-24 128 views
1

使用實體框架4.3和Linq,我想匹配搜索字符串與包含對象的某些屬性以及子對象的屬性。事實證明,這是一個相當複雜的查詢,我不知道該怎麼做。例如,一個屬性是一個整數,我不允許在Linq查詢中調用.ToString()。如何通過實體框架搜索對象及其子對象?

爲了給你什麼,我試圖做一個想法,考慮這個示例代碼:

var dbVersions = from ver in db.Versions 
       where ver.Name.Contains(search) || 
         ver.Children.Any(c=>c.Id.ToString().Contains(search)) 
       select ver; 

我應該如何實現這個搜索?也許通過存儲過程?

數據庫服務器是SQL Server 2012的

回答

5

如果你想使用LINQ,內部的框架會做適當的優化,根據我的經驗,結果是相當不錯的。 如果你不希望使用存儲過程,並堅持LINQ保持它都在你的類代碼使用:

SqlFunctions.StringConvert((double)c.Id) 

您的INT轉換爲字符串。請注意,int不存在重載,因此您需要將其轉換爲double或decimal。

+0

我不知道SqlFunctions存在,它足以解決我的問題!現在我將對Linq滿意,因爲與必須瞭解如何引入存儲過程相比,它節省了大量時間。謝謝! – aknuds1

1

在你情我願建議使用存儲過程。

如果您最終傳遞了一個將用於多列的搜索詞,那麼您最好寫一個存儲過程。我曾經嘗試類似於你在做什麼東西,最終的結果是讓我感到骯髒:)真的很亂LINQ語句

很好的參考:

x.ToString() is not supported by the entity framework!

下面是如何在〔實施例使用存儲的特效與EF:

http://blogs.msdn.com/b/bindeshv/archive/2008/11/20/using-stored-procedures-in-entity-framework.aspx

記住添加的存儲過程,當你「從數據庫更新模型」。

+0

謝謝。不過,我從來沒有將存儲過程與EF結合起來。我應該在模型(.edmx)中定義它嗎?有關如何通過存儲過程完成此搜索的更多詳細信息將有所幫助:) – aknuds1