1

Entity Framework 4.3とLinqでは、検索文字列を、含まれているオブジェクトの特定のプロパティおよび子オブジェクトのプロパティと照合したいと思います。ただし、これはかなり複雑なクエリであることが判明し、その方法がわかりません。たとえば、1つのプロパティは整数であり、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;

この検索をどのように実装する必要がありますか?おそらくストアドプロシージャを介して?

データベースサーバーはSQLServer2012です。

4

2 に答える 2

5

LINQ を使用する場合、フレームワークは内部で適切な最適化を行い、私の経験からすると結果はまったく問題ありません。ストアド プロシージャを使用せず、すべてをクラス コードに保持する LINQ に固執する場合は、次のようにします。

SqlFunctions.StringConvert((double)c.Id)

int を文字列に変換するため。int にはオーバーロードがないため、double または decimal にキャストする必要があることに注意してください。

于 2012-05-24T10:25:11.233 に答える
1

あなたの状況では、ストアドプロシージャを使用することをお勧めします。

複数の列に対して使用される 1 つの検索用語を渡すことになった場合は、ストアド プロシージャを作成することをお勧めします。私はかつてあなたがやっていることと似たようなことを試しましたが、最終結果は本当に厄介なLINQステートメントで、私は汚れた気分になりました:)

良い参考:

x.ToString() はエンティティ フレームワークではサポートされていません。

EF でストアド プロシージャを使用する方法の例を次に示します。

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

「データベースからモデルを更新」するときは、必ずストアド プロシージャを追加してください。

于 2012-05-24T10:09:24.213 に答える