【问题标题】:asp.net 4.5 MVC SQL using distinctasp.net 4.5 MVC SQL 使用不同的
【发布时间】:2013-12-12 04:24:47
【问题描述】:
@foreach (var item in Model) { string mytown = item.town.*enter distinct here* <option value="@mytown"> @mytown</option> 

这会选择我数据库中的所有城镇名称,然后将其显示在下拉菜单中。

如何更改此设置,以便在显示城镇名称时,每个城镇名称仅显示一次。

例如,如果我在数据库中有 3 个伦敦,它将在下拉菜单中显示所有 3 个伦敦。我希望它只显示 1 个伦敦

仅供参考:抱歉,这看起来像是重新发布,但我之前发布了错误的代码

【问题讨论】:

  • 这是一个转贴.. 但它不会改变您之前问题的答案。使用Distinct
  • 你应该在控制器中这样做。
  • @SimonWhitehead 我的歉意

标签: c# sql asp.net-mvc distinct


【解决方案1】:
myCollection.Select(x => x.Name).Distinct().ToList();

【讨论】:

    【解决方案2】:

    据我了解,如果您使用 ID 作为值,则不能这样做。

    ID | Value
    1    Landon
    2    Landon
    3    Landon
    4    Los Angeles
    

    实现此目的的更好方法是使用 LINQ。从数据库中获取列表然后在控制器中过滤towns.Where(x =&gt; x.Name == x.Name.Distinct());

    进一步 内部控制器动作

    ViewBag.towns = new SelectList(towns.Where(x => x.Name == x.Name.Distinct()).ToList(), "Value", "Text");
    

    内部视图

     @Html.DropDownListFor(x => x.SelectedTown, new SelectList(ViewBag.towns, "ID", "Name", Model.SelectedTown))
    

    【讨论】:

      【解决方案3】:

      为什么不将其转换为HashSet&lt;string&gt;()

      var hs = new HashSet<string>(Model);
      

      给定,ModelIEnumerable&lt;string&gt; 吗?

      或者,在控制器中执行此操作,将List&lt;T&gt; 转换为HashSet&lt;T&gt;,然后将其作为IEnumerable&lt;T&gt; 传递给模型。

      或者这个:

      from y in Model.Distinct() select y

      【讨论】:

        猜你喜欢
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多