下面是一个简单的Linq查询,用于填写jquery autocomplete
列表。在调用.Distinct()
方法之后,列表才会正确排序。任何人都可以告诉我为什么或从列表中删除重复的方法并保持秩序?
public JsonResult OverrideSearch(string term)
{
var drm = from d in db.ZipCodeTerritory
where d.DrmTerrDesc.Contains(term)
orderby d.DrmTerrDesc
select d.DrmTerrDesc;
drm = drm.Distinct();
return Json(drm, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:2)
在不同之后应用订购:
public JsonResult OverrideSearch(string term)
{
var drm = db.ZipCodeTerritory
.Where(d => d.DrmTerrDesc.Contains(term))
.Select(d => d.DrmTerrDesc)
.Distinct()
.OrderBy(d => d);
return Json(drm, JsonRequestBehavior.AllowGet);
}
或者使用查询语法(我不喜欢混合查询和方法语法):
public JsonResult OverrideSearch(string term)
{
var drm = from d in db.ZipCodeTerritory
where d.DrmTerrDesc.Contains(term)
select d.DrmTerrDesc;
drm = drm.Distinct();
return Json(drm.OrderBy(d => d), JsonRequestBehavior.AllowGet);
}
顺便说一下,MSDN上的Queryable.Distinct方法有一条说法,它告诉它通常会返回无序序列:
执行表达式时发生的查询行为 表示调用的树不同(IQueryable) 取决于source参数类型的实现。该 预期的行为是它返回一个无序序列 来源中的独特物品。