1

下面是我用来填写 jqueryautocomplete列表的简单 Linq 查询。.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);
    }
4

1 回答 1

2

在 distinct 后应用排序:

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方法有一个注释,它告诉它通常返回无序序列:

由于执行表示调用 Distinct(IQueryable) 的表达式树而发生的查询行为取决于源参数类型的实现。预期的行为是它返回源中唯一项的无序序列。

于 2013-06-20T15:56:19.723 回答