2016-09-11 3 views
0

J'ai eu cette erreur en essayant de trier les colonnes qui ne sont pas dans la table de commande, si j'utilise OrderBy("Customer.CompanyName" + " " + sortDir) l'erreur aura disparu mais toutes les colonnes deviendront incapables de trier. La méthode OrderBy utilisée ci-dessous provient de here.Comment réparer l'erreur 'Aucune propriété ou champ existe dans le type'?

Quelle est la cause du problème?

public ActionResult WebGrid(int page = 1, int rowsPerPage = 10, string sortCol = "OrderID", string sortDir = "ASC") 
    { 
     List<Order> res; 
     using (var nwd = new NorthwindEntities()) 
     { 
      var _res = nwd.Orders 
       .OrderBy(sortCol + " " + sortDir) 
       .Select(o => new Order 
       { 
        OrderID = o.OrderID, 
        OrderDate = o.OrderDate, 
        CompanyName = o.Customer.CompanyName, 
        FirstName = o.Employee.FirstName, 
        //...... 
        //...... 
        //...... 
       }); 

Répondre

3

La classe que vous avez fourni le lien est marqué comme internal et il ne peut pas être utilisé en dehors de l'ensemble, il a été défini, donc vous ne pouvez pas l'utiliser dans votre code.

Cette API prend en charge l'infrastructure du produit et ne doit pas être utilisée directement à partir de votre code. Fournit des fonctionnalités pour créer de nouvelles classes à partir des valeurs d'un contrôle LinqDataSource.

Alors Qu'est-ce que vous essayez d'utiliser est en fait OrderBy l'intérieur Queryable classe qui fait partie de System.Linq qui peut être utilisé comme suit:

.OrderBy(x=> x.sortCol + " " + x.sortDir) 

Si vous essayez de commander par deux colonnes, vous pouvez utiliser:

.OrderBy(x=> x.sortCol).ThenBy(x=> x.sortDir) 

Si vous souhaitez spécifier dynamiquement l'expression orderby, vous pouvez faire une instruction switch pour chaque paramètre possible, ou suivre ce SO Answer pour créer un arbre d'expression dynamique.

+0

Merci pour l'aide, mais je ne peux pas utiliser 'ThenBy' sous linq dynamique. – Phantom

+1

Jetez un oeil à ceci: http://stackoverflow.com/a/34908081/3185569 – user3185569

+0

Merci pour votre aide! J'ai trouvé que je peux utiliser else if statement pour y parvenir. – Phantom