2012-02-10 8 views
0

検索機能の実装方法がわかりましたか?linq述部を使用してアクションを検索します。 ASP.NET MVC

私はそれについてどのように想像してみましょう。この例ではemployeeモデルを使用します。だから、employeeはむしろ標準的なプロパティを持っています: 'Id'、EmployeeIdNameBirthday

Repositoryオブジェクトが保持している方法のように:

IQueryable<T> Get(Expression<Func<T, Boolean>> predicate); 

それではSearchアクションは、テキストボックスでフォームを開催する

[HttpPost] 
public ViewResult Search(Guid Id, Guid EmployeeId, String Name, DateTime birthday) 
{ 
    // call repository.get(x => x.Name == Name && x.Id == Id ...); 
} 

Searchビューのようになります(EmployeeControllerに属します)検索基準/アクションパラメータに対応する。

しかし、そこには検索能力がモデル/コントローラに結合されています。だから私はコントローラごとに同様のアクションを作成する必要があります。

どのようにすればいいですか?

ありがとうございます!

答えて

0

リポジトリへのすべてのコールで述語コードが繰り返されていると言えば、汎用リポジトリから派生する特定のEmployeeRepositoryを作成するか、リポジトリの一部を作成するか、ビア構成:

public class EmployeeRepository : GenericRepository<Employee> 
{ 
    public IEnumerable<Employee> GetEmployeesBySearch(string id, string name...) 
    { 
    return this.Get(x => x.Name == name && ...); 
    } 
} 

また、specification patternと考えることもできます。これは、オブジェクトを選択することの懸念と、選択すべきオブジェクトの関心を分離する。 NHibernate hereの例があります。

+0

いいえ。どういたしまして。事は述語反復ではありません(明らかに述語は異なるでしょう)。物事はコントローラーを越えて行動の繰り返しにある。私はおそらく私は離れて 'Search'機能を抽象化することができますか? – lexeme

+0

私は、私はあなたが同様の検索フォームを各ビューのエンティティの種類ごとに持っていると言っていますか?またはヘッダーのように、複数のビューにわたって使用する必要のある1つの検索フォームがあるとしていますか? – devdigital

+0

今のところ私はどちらも持っていません。しかし、あなたの最後の選択肢は私が望むものです。私はリポジトリクラスを変更したくありません。しかし、私はあなたがアドバイスしたことを検討するつもりです。 – lexeme

1

1 - あなたは

[HttpPost] 
public ViewResult Search(EmployeeViewModel model) 
{ 
    //logic 
} 

2あなたのアクションにあなたの引数を通過する間のViewModelを使用することができます - 一般的な検索機能のために、あなたはDynamic Linqを使用することができます。