2013-06-20 24 views
1

下面是我用來填寫jquery autocomplete列表的一個簡單的Linq查詢。該列表被正確排序,直到.Distinct()方法被調用。任何人都可以告訴我爲什麼或從列表中刪除重複項並保持順序?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); 
    } 
+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); 
} 

BTW有一個備註上Queryable.Distinct MSDN中的方法,它告訴它通常返回無序序列:

由於執行表達式而發生的查詢行爲 代表調用Distinct(IQueryable) 的樹取決於源參數類型的實現。預期的行爲是它返回源中唯一項目的無序序列。

+1

完美,謝謝! – NealR