簡體   English   中英

如何通過實體框架在對象及其子對象上進行搜索?

[英]How to search via Entity Framework on objects and their children?

使用Entity Framework 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。

如果您想使用LINQ,則內部框架將進行適當的優化,並且根據我的經驗,結果還可以。 如果您不想使用存儲過程並堅持使用LINQ,請將其全部保留在類代碼中,請使用:

SqlFunctions.StringConvert((double)c.Id)

用於將int轉換為字符串。 請注意,int沒有重載,因此您需要將其強制轉換為雙精度或十進制。

在您的情況下,我建議使用存儲過程。

如果您最終傳遞了一個將用於多列的搜索詞,那么最好編寫一個存儲過程。 我曾經嘗試過類似您正在做的事情,最終結果是LINQ語句非常凌亂,使我感到很臟:)

好的參考:

實體框架不支持x.ToString()!

這是如何在EF中使用存儲的proc的示例:

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

當您“從數據庫更新模型”時,請記住要添加存儲的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM