Asp.net mvc 在ASP.NET MVC5中避免重复记录
我是ASP.NET新手,所以我的搜索引擎中存在重复记录的问题。当我搜索这些城镇时,有些记录是重复的,有些是双重的 控制器.csAsp.net mvc 在ASP.NET MVC5中避免重复记录,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我是ASP.NET新手,所以我的搜索引擎中存在重复记录的问题。当我搜索这些城镇时,有些记录是重复的,有些是双重的 控制器.cs [Authorize(Roles = "Attorney")] public ActionResult CreateNext(int? id) { var currentUser = manager.FindById(User.Identity.GetUserId()); var nfDoc = db.NFDOCUMENTS.Find(id);
[Authorize(Roles = "Attorney")]
public ActionResult CreateNext(int? id)
{
var currentUser = manager.FindById(User.Identity.GetUserId());
var nfDoc = db.NFDOCUMENTS.Find(id);
if (nfDoc.UserId == currentUser.Id && nfDoc.FacilityId == null)
{
var contacts = db.Contacts.Where(x => x.ContactCategory.Name == "Facility");
List<string> towns = new List<string>();
foreach (var item in contacts)
{
if (!towns.Contains(item.City))
{
towns.Add(item.City);
}
}
ViewData["towns"] = towns;
var medProviders = db.Contacts.Where(x => x.ContactCategory.Name == "Facility" && x.Firstname != null).ToList();
ViewData["medProviders"] = medProviders;
var pat = db.Patients.Where(x => x.Id == nfDoc.PatientId).FirstOrDefault();
ViewBag.Address = pat.Address1 + ", " + pat.City + ", " + pat.State + ", " + pat.Zip;
ViewBag.InsuranceId = new SelectList(db.Contacts.Where(s => s.ContactCategory.Name == "Insurance Carrier"), "Id", "Firstname");
ViewBag.AdjusterId = new SelectList(db.Contacts.Where(s => s.ContactCategory.Name == "Adjuster"), "Id", "Firstname");
ViewBag.FacilityId = new SelectList(db.Contacts.Where(s => s.ContactCategory.Name == "Facility"), "Id", "Firstname");
ViewBag.DoctorId = new SelectList(db.Contacts.Where(s => s.ContactCategory.Name == "Doctor"), "Id", "Firstname");
ViewBag.PatientId = pat.Id;
ViewBag.PatientName = pat.Firstname + " " + pat.Lastname;
return View();
}
else
{
return RedirectToAction("Create");
}
}
[授权(角色=“律师”)]
公共操作结果CreateNext(int?id)
{
var currentUser=manager.FindById(User.Identity.GetUserId());
var nfDoc=db.NFDOCUMENTS.Find(id);
if(nfDoc.UserId==currentUser.Id&&nfDoc.FacilityId==null)
{
var contacts=db.contacts.Where(x=>x.ContactCategory.Name==“Facility”);
列表城镇=新列表();
foreach(联系人中的var项目)
{
如果(!towns.Contains(item.City))
{
城镇。添加(项目。城市);
}
}
ViewData[“城镇”]=城镇;
var medProviders=db.Contacts.Where(x=>x.ContactCategory.Name==“Facility”&&x.Firstname!=null).ToList();
ViewData[“医疗提供者”]=医疗提供者;
var pat=db.Patients.Where(x=>x.Id==nfDoc.PatientId).FirstOrDefault();
ViewBag.Address=pat.Address1+“,“+pat.City+”,“+pat.State+”,“+pat.Zip;
ViewBag.InsuranceId=新选择列表(db.Contacts.Where(s=>s.ContactCategory.Name==“保险公司”)、“Id”、“Firstname”);
ViewBag.AdjusterId=新的选择列表(db.Contacts.Where(s=>s.ContactCategory.Name==“调节器”),“Id”,“Firstname”);
ViewBag.FacilityId=新建选择列表(db.Contacts.Where(s=>s.ContactCategory.Name==“Facility”)、“Id”、“Firstname”);
ViewBag.DoctorId=新建选择列表(db.Contacts.Where(s=>s.ContactCategory.Name==“医生”)、“Id”、“Firstname”);
ViewBag.PatientId=pat.Id;
ViewBag.PatientName=pat.Firstname+“”+pat.Lastname;
返回视图();
}
其他的
{
返回重定向操作(“创建”);
}
}
查看
所以我希望在搜索引擎过滤过的城镇后,我希望避免重复
<div class="input-group col-md-12">
<input id="search" type="text" class="form-control input-lg" placeholder="Search towns" />
</div>
<ul class="list-group nav nav-pills nav-stacked" style="height: 200px; overflow-x: hidden; overflow-y: auto">
<li><a class="reload-towns"><i class="icon-location4"></i> ALL TOWNS</a></li>
@foreach (var item in towns)
{
<li><a class="town" data-town="@item"><i class="icon-location3"></i> @item</a></li>
}
</ul>
</div>
</div>
</div>
- 所有城镇
@foreach(城镇中的var项目)
{
- @item
}
如果您想在c#端解决这个问题,您可以始终使用HashSet(HashSet集合只有在不重复的情况下才向集合添加另一个字符串)
因此,不要使用这个:
List<string> towns = new List<string>();
如果您想在c#端解决这个问题,您可以始终使用HashSet(HashSet集合只有在不重复的情况下才向集合添加另一个字符串) 因此,不要使用这个:
List<string> towns = new List<string>();
ASP.NET是一个web框架。它与数据访问无关。数据访问是实体框架的工作 您没有解释哪个查询返回重复项,但我怀疑每个城市都有多个联系人。此循环:
foreach (var item in contacts)
{
if (!towns.Contains(item.City))
{
towns.Add(item.City);
}
}
使用.NET比较规则,这意味着大小写和空格很重要
它可以改写为
var towns=db.Contacts.Where(x => x.ContactCategory.Name == "Facility")
.Select(x=>x.City)
.Distinct()
.ToList();
这将生成一个如下所示的查询:
SELECT DISTINCT City
FROM Contacts inner join ContactCategory on ContactCategory.ID=Contacts.CategoryID
Where ContactCategory.Name='Facility';
这将只显示唯一的城市名称,并在列表中返回结果。字符串的大小写是否重要取决于City
列的排序规则,但最常见的选项是使用不区分大小写的排序规则
如果
City
列包含脏数据(例如带有前导空格或尾随空格),则此操作仍可能失败 ASP.NET是一个web框架。它与数据访问无关。数据访问是实体框架的工作
您没有解释哪个查询返回重复项,但我怀疑每个城市都有多个联系人。此循环:
foreach (var item in contacts)
{
if (!towns.Contains(item.City))
{
towns.Add(item.City);
}
}
使用.NET比较规则,这意味着大小写和空格很重要
它可以改写为
var towns=db.Contacts.Where(x => x.ContactCategory.Name == "Facility")
.Select(x=>x.City)
.Distinct()
.ToList();
这将生成一个如下所示的查询:
SELECT DISTINCT City
FROM Contacts inner join ContactCategory on ContactCategory.ID=Contacts.CategoryID
Where ContactCategory.Name='Facility';
这将只显示唯一的城市名称,并在列表中返回结果。字符串的大小写是否重要取决于City
列的排序规则,但最常见的选项是使用不区分大小写的排序规则
如果
City
列包含脏数据(例如带有前导空格或尾随空格),则此操作仍可能失败 ASP.NET是一个web框架。它与数据访问无关。您很可能想询问实体框架。你必须发布相关代码并解释错误。你在说什么复制品?哪些问题?表中包含什么,您期望得到什么,您得到了什么?顺便说一句,如果您从联系人表中加载城镇,您将始终至少有两个来自同一城镇的联系人。@PanagiotisKanavos我编辑了我的问题。所以我在寻找城镇,在我过滤城镇之后,我得到了重复的城镇。我想避免这种情况如果要选择不同的项目,请使用.select()
选择所需内容,并使用.distinct()
仅选择不同的条目。您也不需要手动填写列表,只需调用.ToList()
或.ToArray()
我重复一遍,ASP.NET MVC与数据访问无关。视图代码没有解释任何内容。不过,加载towns的代码效率很低,而且可能是错误的ASP.NET是一个web框架。它与数据访问无关。您很可能想询问实体框架。你必须发布相关代码并解释错误。你在说什么复制品?哪些问题?表中包含什么,您期望得到什么,您得到了什么?顺便说一句,如果您从联系人表中加载城镇,您将始终至少有两个来自同一城镇的联系人。@PanagiotisKanavos我编辑了我的问题。所以我在寻找城镇,在我过滤城镇之后,我得到了重复的城镇。我想避免这种情况如果要选择不同的项目,请使用.select()
选择所需内容,并使用.distinct()
仅选择不同的条目。您也不需要手动填写列表,只需调用.ToList()
或.ToArray()
我会重复,ASP.NE