2011-08-03 11 views
0

MongoDBとMVC WebサイトのC#ドライバを使用して検索ランクを結果とともに表示しようとしています。 私の目標は、グリッドを表示するには、このようなものです:MongoDBとC#ドライバでランクを計算する

public class Product 
{ 
    [BsonId] 
    public string Id { get; set; } 

    public string Name { get; set; } 

    public int Rank { get; set; } 
} 
:これは1
  • これを結果である

    1. これは3つの

    私のモデルを結果である2

  • を結果であり、

    リポジトリレイヤのコードが次のように表示されます。

    public IList<TEntity> Find<TEntity>(Expression<Func<TEntity, bool>> criteria) where TEntity : class 
        { 
         return this.GetQuery<TEntity>().AsQueryable().Where(criteria).ToList<TEntity>(); 
        } 
    

    私のコントローラは、次のようになります。

    public ActionResult Index(string query) 
        { 
         var model = new SearchModel(); 
    
         model.Results = this.Repository.Find<Product>(x => x.Name == “some query”) 
          .OrderBy(model.GridSortOptions.Column, model.GridSortOptions.Direction) 
          .AsPagination(1, 25); 
    
         return View(model); 
        } 
    

    Mongo.Findコマンドは、各レコードを持つモデルを投入し、ランク(1、2、3など)を計算する必要があります。

    C#ドライバを使用してこれを行うにはどうすればよいですか?私はまた、流暢linqプロバイダを使用しています。

  • 答えて

    1

    mongodbにはRankの機能がありませんので、ドライバはサポートしていません。しかし、私はあなたがデータをロードしたとき、またはグリッドを表示するときに、クライアント側で行ランクを構築できるので、それは問題ではないと思います。

    var pagingSkip = 1; 
    model.Results = this.Repository.Find<Product>(x => x.Name == “some query”) 
        .OrderBy(model.GridSortOptions.Column, model.GridSortOptions.Direction) 
        .AsPagination(pagingStart, 25); 
    
    foreach(var item in model.Results) 
    { 
        item.Rank = pagingSkip + 1; 
    } 
    
    +0

    私はこのようにすることを考えていました。一種の醜い。ありがとう! – rboarman

    +0

    @ rboarman:いいえ、いいえ、醜いわけではありません。あなたは代わりにSQLを使うことができます、そこにランク関数があります;)。どういたしまして。 –

    関連する問題