個別

2016-04-15 17 views
1

データベース表のDropDownListを行います。私は私の作成したアクションにのみSportプロパティのドロップダウンリストを作成したい個別

|ID|  |Athlete|  |Sport| 
1  Jacoby Ellsbury  Baseball 
2  Dustin Pedroia  Baseball 
3  Kobe Bryant  Basketball 
4  Lebron James  Basketball 
5  Patrick Kane   Hockey 
6  Sidney Crosby  Hockey 

私がしようとしているもの:

ViewBag.Sport = new SelectList(db.AthleteTable.Distinct(), "ID", "Sport"); 

Or:

ViewBag.Sport = new SelectList(db.AthleteTable, "ID", "Sport").Distinct(); 

CSHTML:

<div class="form-group"> 
    @Html.LabelFor(model => model.Sport, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("Sport", null, "-- Select Sport --", htmlAttributes: new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Sport, "", new { @class = "text-danger" }) 
     </div> 
</div> 

これは私のドロップダウンリストをレンダリングするが、値はそう繰り返し:

Baseball 
Baseball 
Basketball 
Basketball 
Hockey 
Hockey 

私が欲しいもの:

Baseball 
Basketball 
Hockey 

すべてのヘルプは高く評価されます。

UPDATE:私は他のdropdownlistsを作成し、そのようにスポーツすることにより、各選手を分離できるためであるように私のテーブルがある理由

理由:

List<SelectListItem> lstAthletes = new List<SelectListItem>(); 

     using(var context = new ConnectionString()) 
     { 
      List<AthleteTable> lstAthletes = context.AthleteTable.ToList(); 
      var groups = lstAthletes.GroupBy(x => x.Sport); 
      foreach(var group in groups) 
      { 
       var slg = new SelectListGroup() { Name = group.Key }; 

       foreach(AthleteTable athlete in group) 
       { 
        SelectListItem item = new SelectListItem() { Text = athlete.Athlete, Value = athlete.ID.ToString(), Group = slg }; 
        lstAthletes.Add(item); 
       } 
      } 

     } 
+1

「スポーツ」はあなたのデータセット内の別の話ではありませんか?あなたはデータを非正規化することを検討して、これを(そして他のタスクも)きれいにするでしょう。 –

答えて

4

あなたはGroupByを使用することができます。

var distinctSports = db.AthleteTable.GroupBy(a => a.Sport).Select(g => g.First()); 
ViewBag.Sport = new SelectList(distinctSports, "ID", "Sport"); 

しかし、アスリートのテーブルからスポーツを選んで、アスリートIDを完全に無関係なスポーツ名にマッピングするのは奇妙ですスポーツIDではなくアスリートIDです。

通常、運動台にSport表記とそれに外部キーが必要です。それからあなたはそれから選ぶことができ、すべてのスポーツはユニークになるでしょう。

+0

これは私の実際のコードではありません。私は私の頭の上から離れて、私のポイントを得るために、例を作成しています –

+0

また、私はあなたの例を実行したときに、 'しかし、まだ動作します! –

+0

@BviLLe_Kid:なぜそれを 'FirstOrDefault'に変更しなければならなかったのですか? 'GroupBy'の後にグループが存在しない/空でないことはありえません。 –

関連する問題