2017-12-07 11 views
1

私は現在.NET 4.5のASP.NETアプリケーションを開発中です。ASP.NETフィルタIQueryableでカスタム式

  1. MainProject
  2. サブプロジェクト

MainProject sおよびSubProject sが、異なる特性を持っているが、一般的に1つの性質を持っている。現在、私はIQueryableを使用して、私のデータベースから2つのビューの結果を取得していますObjectNumber、これはインターフェイスISearchResultで定義しました。

同じコードを2回書くのではなく、両方のビューの結果を1つの方法でフィルタリングするExpressionを作成したいと思います。

マイビュー結果のクラスとインタフェース

は、次のようになります。

public interface ISarchResult 
{ 
    int ID { get; set; } 
    string ObjectNr { get; set; } 
} 

public class MainProject : ISearchResult 
{ 
    public int ID { get; set; } 
    public DateTime? CreationDate { get; set; } 
    public string Title { get; set; } 
    public string ObjectNr { get; set; } 
} 

public class SubProject : ISuchResultat 
{ 
    public int ID { get; set; } 
    public string ObjectNr { get; set; } 
    public short State { get; set; } 
    public int? Anything { get; set; } 
    public int? Something { get; set; } 
} 

クラスの後ろに私のコードでは、私はこのようになります私のフィルタ方法、あります

private IQueryable<MainProject> FilterObjectNumbers(IQueryable<MainProject > result) 
{ 
    var objectNumbers = this.objectNrField.Text.Split(',').Select(objNr => objNr.Trim()).Where(t => !string.IsNullOrEmpty(t)).ToList(); 

    if (objectNumbers.Count > 0) 
    { 
     var projectIDs = objectNumbers.Select(objNr => Util.StringToInt(objNr)).Where(objNr => objNr > 0).ToList(); 
     result = result.Where(i => objectNumbers.Contains(i.ObjectNr) || projectIDs.Contains(i.PK_ID)); 
    }  

    return result; 
} 

あなたはどのように知っていますがこのメソッドをクエリ式に変換して、のタイプをMainProjectに、SubProjectをフィルタリングしますか?

このExpression Filterメソッドを拡張メソッドに入れることはできますか?

答えて

0

それは、その後

//assuming IQueriable<MainProject> mainProjectResult 
var filteredResult = mainProjectResult.FilterObjectNumbers(this.objectNrField.Text); 
+0

恐ろしいを使用することができますISarchResult制約

public static IQueryable<T> FilterObjectNumbers<T>(this IQueryable<T> result, string objectNrFieldText) where T : ISarchResult { var objectNumbers = objectNrFieldText.Split(',').Select(objNr => objNr.Trim()).Where(t => !string.IsNullOrEmpty(t)).ToList(); if (objectNumbers.Count > 0) { var projectIDs = objectNumbers.Select(objNr => Util.StringToInt(objNr)).Where(objNr => objNr > 0).ToList(); result = result.Where(i => objectNumbers.Contains(i.ObjectNr) || projectIDs.Contains(i.ID)); } return result; } 

で、一般的な拡張メソッドを作成します!ありがとう、まさに私が探していたもの:)) –

関連する問題