【问题标题】:asp.net 4.5 MVC SQL select likeasp.net 4.5 MVC SQL 选择喜欢
【发布时间】:2013-12-30 08:11:22
【问题描述】:

所以我有这个代码:

 public ActionResult SearchIndex(string id)
    {
        string searchString = id;


        var members = from m in db.Members
                      select m;

        if (!String.IsNullOrEmpty(searchString))
        {
            members = members.Where(m => m.town.Equals(searchString));
        }

        return View(members);
    }

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我不确定接受的答案是否解决了您的原始问题,即从控制器返回一个可枚举的 Member 到视图,并在城镇中使用可选过滤器,将列表限制为最多一个成员在每个城镇:

    var members = db.Members; // Or .AsQueryable();
    
    if (!String.IsNullOrEmpty(searchString))
    {
        // Apply the conditional filter, returning Members
        members = members.Where(m => m.town == searchString);
    }
    
    // First of each member only (randomly)
    return View(members
                 .GroupBy(m => m.town)
                 .Select(grp => grp.First()));
    

    但是,您的真正要求似乎是

    • 使用过滤的IEnumerable<Member> 作为@Model 查看
    • 作为次要要求,在下拉列表中填充不同的城镇

    在这种情况下,您还可以投射IEnumerable<string>,例如进入ViewBag,或者更好的是,创建一个自定义ViewModel 类,其中包含过滤后的成员列表和下拉列表中的不同城镇。

    ViewBag.DistinctTowns = db.Members.Select(m => m.town).Distinct();
    

    【讨论】:

    • 如何按字母顺序添加 orderBy 这个 bit(m => m.town).Distinct(); ?顺便说一句,代码很好用,谢谢
    • @user1300788 .Distinct().OrderBy(t => t); (和 +1 StuartLC)
    【解决方案2】:

    您想使用Distinct method on IEnumerable

    var towns = members.Where(m => m.town.Equals(searchString))
                      .Select(m => m.town).Distinct();
    

    这将 Select 仅显示城镇值,然后获取 Distinct 值,因此 London 只会出现一次。

    【讨论】:

    • @user1300788 对不起,那是因为你试图用不同类型的东西覆盖成员变量。创建一个名为 towns 的新变量(无论如何这更有意义)并设置它。
    • 我仍然得到同样的错误:/你能编辑你的答案来展示你是怎么做到的吗?
    • 我觉得自己很傻,但是我将代码的错误部分发布到了 distinct 的位置。 @foreach (var item in Model) { string mytown = item.town.*enter distinct here* <option value="@mytown"> @mytown</option> 我怎么能适应这个?
    • 它会像@foreach (var item in Model.Select(m => m.Town).Distinct()) ... 这样你就可以使用item,而不是mytown。
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2021-09-03
    • 2013-04-15
    • 2021-07-03
    相关资源
    最近更新 更多