使用.Distinct()后,Linq查询不再正确排序

时间:2013-06-20 15:53:15

标签: .net linq

下面是一个简单的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);
    }

1 个答案:

答案 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参数类型的实现。该   预期的行为是它返回一个无序序列   来源中的独特物品。

相关问题