1

基本的に、where ステートメントだけでなく、クエリ ステートメント全体に基づいて IQueryable を取り込んで IQueryable を返すことができる拡張メソッドを探していると思います。

検索方法に必要なものの例:

IRepository<Person> repository = new Repository<Person>();
var results = repository.GetQuery().Include("Names").Search([dynamic linq here]);

現在、where メソッド内に動的 linq ステートメントを作成する場所があります。

IRepository<Person> repository = new Repository<Person>();
var results = repository.GetQuery().Include("Names").Where([dynamic linq here]);

このアプローチの問題は、実際の動的 linq クエリに SelectMany と Select を含めたいということです。サブ プロパティのサブ プロパティを実際に使用しない限り、Where メソッド内で SelectMany を使用することはできません。次の動的 linq ステートメントのようなことをしたいと思います。

SelectMany("Names").Where("LastName.Contains(@0)", "Smith").Select("Person")
4

2 に答える 2

1

拡張メソッドを使用せずにこの問題を解決しました。Whereメソッド内で機能する同様のクエリを使用することができました。

だから代わりに...

SelectMany("Names").Where("LastName.Contains(@0)", "Smith").Select("Person") 

Whereメソッド内にある次のクエリでも同じ結果を得ることができました。

Where.("Names.Select(LastName).Contains(@0)", "Smith)

次に、ContainsAggregateをDynamicLinqライブラリに追加する必要があったとき。

http://blog.walteralmeida.com/2010/05/advanced-linq-dynamic-linq-library-add-support-for-contains-extension-.html

SelectManyは、野生のガチョウの追跡で私たちを送り出しました!

于 2011-03-18T16:20:42.010 に答える
0

この nuget パッケージをチェックしてください: NinjaNye.SearchExensions

これにより、次のようなことが可能になります。

var repository = new Repository<Person>();
var results = repository.GetQuery().Search(p => p.LastName, "Smith");

SQL に接続すると、次のようなものが生成されます。

SELECT [Extent1].[Id] AS [Id], 
       ... [other properties],
       [Extent1].[LastName] AS [LastName] 
FROM   [dbo].[Person] AS [Extent1]
WHERE  ([Extent1].[LastName] LIKE N'%Smith%')

クエリは式ツリーを使用して構築されるため、結果はクリーンです。ここでソースコードをチェックしてください: https://github.com/ninjanye/SearchExtensions/

于 2013-11-26T13:03:27.530 に答える