// GET: Articles public ActionResult Index(string sort,string filter) { var query = db.Articles.AsQueryable(); //データソース // filter if(!string.IsNullOrEmpty(filter)) { query = query.Where(a => a.Title.Contains(filter) || a.Description.Contains(filter)); } Article article = null; SortDefinition<Article> sort_def = new SortDefinition<Article>() { Fields = new[] { //ソート列定義 article.DefineSort(a=>a.Url), article.DefineSort(a=>a.Title), article.DefineSort(a=>a.Description), article.DefineSort(a=>a.Viewcount), article.DefineSort(a=>a.Published), article.DefineSort(a=>a.Released), }, SortKey=sort }; query=sort_def.AddOrderBy(query); ViewBag.SortDef = sort_def; //リンク作成用にソート定義を渡す ViewBag.InputedFilter = filter; //入力されたフィルター return View(query.ToList()); //ソート済み結果をViewに返す。 }
public void SortDefinition_Test1() { var data = this.TestData1(10); Article article = null; SortDefinition<Article> sort_def = new SortDefinition<Article>() { Fields=new[]{ //ソート列定義 article.DefineSort(a=>a.Title), article.DefineSort(a=>a.Viewcount), article.DefineSort(a=>a.Published) }, SortKey = "Title" //ソート対象 }; data= sort_def.AddOrderBy(data); //かつてループだったところ var result = data.ToArray(); for (var i = 0; i < 10; i++) { Assert.AreEqual(i, result[i].Viewcount); } }