2010-02-09 7 views
0

J'utilise LINQ dans un webservice qui crée une fonction de saisie semi-automatique sur une zone de texte. Je l'ai à travailler mais, malheureusement, les résultats ne sont pas renseignés dans l'ordre que je pense, par exemple, si j'étais recherche de boissons commençant par « carl » Je serais attendu « carling » d'abord, puis « Carlsberg » mais n'est pas le cas.Autocomplete Extender pas le tri par ordre alphabétique

Le webservice utilisé est:

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; 
     } 
    } 

    } 

Le détail .net est la suivante:

<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; 

     } 

Si quelqu'un peut signaler l'erreur dans mes voies, je serais très reconnaissant.

Répondre

2

J'ai trouvé la réponse.

Le distinct doit être placé avant le orderby dans ma requête LINQ dans le 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

Vous faites le tri par UnitDescription mais la contrainte sur prefixText et l'élément finalement sélectionné est IDDesc. Il n'est pas évident que vous devriez utiliser, mais je pense que vous devriez être cohérent - soit par ordre IDDesc, ou faire vos Contains et Select appels utilisent UnitDescription aussi.

+0

De nombreuses excuses Jon, qui me était « jouer » et voir si vous utilisez unitdescription fait une différence. Lorsque je commande par IDDesc, le même scénario se produit par exemple une survient liste des produits –

+0

triés de manière incorrecte Il semblerait qu'aucun tri est en fait - de regarder quelques lignes, on dirait qu'il tire uniquement les données sans commande . –

Questions connexes