2010-02-09 84 views
0

我在一個web服務中使用LINQ,在文本框上創建一個自動完成功能。我有它的工作,但不幸的是,結果沒有按照我預期的順序填充,例如,如果我搜索以「carl」開頭的飲料,我期望先「carling」,然後再「carlsberg」,但是這個情況並非如此。自動完成擴展器不按字母順序排序

正在使用的Web服務是:

public string[] GetProdDesSearch(string prefixText, int count) 
    { 

     try 
     { 
      ReportingService.ProductsDataContext dbac = new ReportingService.FinalProductsDataContext(); 

      return dbac.FINALPRODUCTSNEWDEMOs 
       .Where(r => r.MemberId == HttpContext.Current.Session["MemberKey"].ToString() && r.IDDesc.Contains(prefixText)) 
       .OrderBy(r => r.UnitDescription) 
       .Select(r => r.IDDesc) 
       .Distinct() 
       .Take(count) 
       .ToArray(); 

     } 

     catch (Exception) 
     { 
      return null; 
     } 
    } 

    } 

在.NET細節如下:

<asp:TextBox ID="tbxProdAC" runat="server" 
    style="z-index: 1; left: 200px; top: 460px; position: absolute; height: 20px; width: 345px;" 
    CssClass="completionList2" AutoPostBack="True" 
    ontextchanged="tbxProdAC_TextChanged"></asp:TextBox> 


<cc1:AutoCompleteExtender ID="tbxProdAC_AutoCompleteExtender" runat="server" 
    DelimiterCharacters="" Enabled="True" 
    ServicePath="~/Reporting/GetProd.asmx" 
    ServiceMethod="GetProdDesSearch" 
    TargetControlID="tbxProdAC" 
    CompletionInterval="50" CompletionSetCount="50" 
    MinimumPrefixLength="3" 
    onclientpopulating="ShowImage" 
    onclientpopulated="HideImage" 
    CompletionListCssClass="completionList2"> 
</cc1:AutoCompleteExtender> 

.completionList2 {font-family: Trebuchet MS;font-size:11px; border:solid 1px #444444;margin:0px;padding:2px;height: 395px; 
      overflow:auto; background-color:White; 
      z-index: 1; 
      left: 200px; 
      top: 310px; 
      position: absolute; 
      width: 1496px; 

     } 

如果有人能指出我的方式錯誤,我將非常感謝。

回答

2

我找到了答案。

的不同應該在我的LINQ查詢被放置在排序依據之前的WebService中:

return dbac.FINALPRODUCTSNEWDEMOs 
       .Where(r => r.MemberId == HttpContext.Current.Session["MemberKey"].ToString() && r.IDDesc.Contains(prefixText)) 
       .Distinct() 
       .OrderBy(r => r.IDDesc) 
       .Select(r => r.IDDesc) 
       .Take(count) 
       .ToArray(); 
1

您正在按UnitDescription排序,但prefixText和最終選擇的項目的約束都是IDDesc。這不是你應該使用的,但我認爲你應該是一致的 - 要麼按IDDesc排序,要麼你的ContainsSelect調用也使用UnitDescription

+0

很多道歉喬恩,那就是我「打」,看看是否使用unitdescription作出任何區別。 當我通過IDDesc進行訂購時,也會發生同樣的情況,即產品的排序錯誤 – 2010-02-09 10:28:07

+0

看起來實際上沒有進行排序 - 從查看幾行結果看來,它看起來像是在沒有排序的情況下單獨提取數據。 – 2010-02-09 10:31:23