2012-11-15 5 views
0

J'ai la requête LINQ suivante.Erreur LINQ Colonne non valide lors de l'extraction de la valeur de colonne supplémentaire

// Query the database 
    IEnumerable<BestSeller> best_sellers = from bs in (db.smd_group) 
              where bs.COMPANY == "SMD Textiles" 
              where bs.DOCDATE > six_months_back 
              where bs.CUSREF == customer.customer_ref 
              group bs by bs.PRODCODE into g 
              orderby g.Sum(x => x.MQTY) descending 
              select new BestSeller() 
              { 
               product_code = g.Key.Trim(), 
               total_quantity = Convert.ToString(g.Sum(x => x.MQTY)), 
               // ERROR Occurs when the following line is removed 
               //product_description = g.First().prd_prddes 
              }; 

    // Get the top 25 products 
    top25 = best_sellers.Take(25); 

Comme vous pouvez le voir, j'ai commenté une ligne où sont créés mes BestSeller objets. Je souhaite définir le product_description dans mon objet BestSeller. J'ai donc ajouté la ligne `ci-dessous:

product_description = g.First().prd_prddes 

« prd_prddes » est le nom de la colonne qui contient notre description du produit.

Cependant, dès que j'ajouter cette ligne à ma requête, j'obtiens une erreur étrange:

Invalid column name 'PRODCODE'.

Invalid column name 'PRODCODE'.

Invalid column name 'PRODCODE'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'PRODCODE'. Invalid column name 'PRODCODE'. Invalid column name 'PRODCODE'.

Le nom de la colonne ProdCode est manifestement pas invalide, car il fonctionne très bien si je retire la ligne product_description .

Il est très particulier ...

+1

Comment savez-vous 'PRODCODE'" clairement n'est pas invalide "? Je ne le vois nulle part dans votre code (je vois PRODCODE2), et je suis sûr que le code ne ment pas quand il lance cette erreur ... Quel type est 'bs'? –

+0

Oups, désolé, je voulais changer "PRODCODE2" en "PRODCODE" avant de poster. Ce n'est pas invalide, car sans la ligne product_description = g.First(). Prd_prddes', le code fonctionne et renvoie toutes les valeurs correctes. Merci – Luke

Répondre

2

Il ressemble à ce que vous avez dans g ne dispose pas d'une colonne nommée 'PRODCODE'

Personnellement, ce que je ferais, est que je venais de sélectionner g dans votre Sélectionnez une instruction, puis je ferais un point d'arrêt et j'utiliserais le débogueur pour voir ce qu'il y a dedans.

0

Avez-vous vérifié pour voir si tous vos résultats PRODCODE sont valides? Il semble que l'un soit nul ou vide. Cela signifie que vous pouvez toujours le grouper, mais une fois que vous essayez de le sélectionner, il lance cette erreur.

Essayez ceci:

product_description = g.FirstOrDefault() == null 
    ? g.FirstOrDefault().prd_prddes 
    : "Empty"; 

Si le premier élément est nul, il retombera et afficher « vide ». Je ne suis pas sûr si le premier article est nul, cependant, donc cela peut ne pas fonctionner ...

Questions connexes