2010-02-09 145 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