C# asp.net 4.5 MVC SQL select like
所以我有这个代码:C# asp.net 4.5 MVC SQL select like,c#,asp.net,sql,asp.net-mvc,C#,Asp.net,Sql,Asp.net Mvc,所以我有这个代码: public ActionResult SearchIndex(string id) { string searchString = id; var members = from m in db.Members select m; if (!String.IsNullOrEmpty(searchString)) { members
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个伦敦您要使用
这将
仅选择城镇值,然后获得不同的值,因此伦敦将只出现一次。我不确定接受的答案是否解决了您最初的问题,即从控制器返回可枚举的成员
,并在城镇上使用可选过滤器,将名单限制为每个城镇最多一名成员:
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
作为@Model查看
- 作为第二个要求,使用不同的城镇填充下拉列表
在这种情况下,您还可以将IEnumerable
投影到ViewBag
中,或者更好地创建一个自定义ViewModel
类,该类包含已筛选的成员列表和下拉列表中的不同城镇
ViewBag.DistinctTowns = db.Members.Select(m => m.town).Distinct();
@user1300788抱歉,这是因为您试图用不同类型的内容覆盖members变量。创建一个名为towns的新变量(无论如何,它更有意义)并进行设置。我仍然会遇到相同的错误:/你能编辑你的答案来显示你是如何做到这一点的吗?我觉得很傻,但我把我的代码中错误的部分贴到了distinct的位置@foreach(模型中的var项){string mytown=item.town.*在这里输入distinct*@mytown
我如何将distinct放入其中?它类似于@foreach(模型中的var项.Select(m=>m.town.distinct())…
那么您只需使用item,而不是mytown。我如何才能将orderBy按字母顺序添加到此位(m=>m.town).Distinct();
?顺便说一句,代码非常有用thanks@user1300788.Distinct().OrderBy(t=>t);(和+1 StuartLC)
ViewBag.DistinctTowns = db.Members.Select(m => m.town).Distinct();