2017-05-16 19 views
0

一般的な型のIQueryableデータソースをフィルタリングするメソッドを作成しようとしています。私が作成するテーブルごとに再利用できる検索方法が必要です。私は、検索を絞り込むことができるようにフィールドの型を渡すことができるようにすることをお勧めしますが、すべてのフィールドを調べただけでは気にしません。一般的なIQueryableソースを使用するLINQ where節

public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor) 
{ 
    foreach(var variable in dataSource) 
    { 
     dataSource = dataSource.Where(var.Contains(searchFor)); 
    } 
} 

これは本当に可能な場合は私は知らないが、私はそれぞれの新しいテーブルの新しい検索方法を実装する必要がありますので、それは私のコーディングのトンを救う:

は、これまでのところ私はこれを持っています私は見ているだろう。

+0

テーブルから1つ以上の列を検索しますか列の文字列名に置き換えます。 –

答えて

0

あなたはここにforループを必要とし、この行の間違いを持っ​​ていない:

dataSource = dataSource.Where(var.Contains(searchFor)); 

あなたはこのようにインタフェースを定義することができます。

public interface IMyInterface 
{ 
    bool Contains(string searchFor); 
} 

を、今あなたがあなたの関数を書くことができます次のようにします。

public static IQueryable<T> Search<T>(IQueryable<T> dataSource, string searchFor) where T:IMyInterface 
{ 

    return dataSource.Where(x=>x.Contains(searchFor)); 
} 
+0

これは、そのデータソース内のすべてのフィールドを調べますか?もしそうなら、あなたが検索したいフィールドを指定する方法はありますか?たぶんパラメータとして渡すだけでしょうか? – Pinball125

+0

@ Pinball125この関数で使用するすべてのテーブルクラスにContainsを実装する必要があります。そのContainsメソッド内のフィールドを自由に指定することができます。 LINQここでは、呼び出されたコレクション全体を処理し、ステートメントを渡す項目を返します。 –

+0

これはほとんどのIQueryable実装では機能しません。これは、IEnumerableに適しています –

関連する問題