Comment ajouter une condition Where Not Equals dans une requête Linq

Gabriele

J'utilise ce code pour castmon DataGridView, puis j'affiche les résultats dans un autre fichier DataGridView.

Fondamentalement, j'obtiens des valeurs int et je calcule leur somme, tout en regroupant ces valeurs avec GroupBy.

J'affiche les résultats dans un autre DataGridViewcomme ceci :

datagridview2.DataSource= Su.ToList();

Mon problème est que la requête semble s'arrêter si la cellule a une valeur de chaîne.

J'ai essayé d'ajouter une wherecondition « pas » pour exclure les lignes qui contiennent des valeurs de chaîne de plusieurs manières différentes, mais j'ai échoué.

Voici un exemple de la condition que j'ai essayé:

.Where(row => !row.Cells[2].Value.ToString().Equals("example"))

Ce code est dans la datagridview_cellvaluechangedméthode :

    try
{
    var Su = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(row => row.Cells[8].Value != null)
    .Where(row => row.Cells[2].Value != null)
    .GroupBy(row => row.Cells[8].Value.ToString()) 
    .Select(g => new
    {
        Gruppo = g.Key,
        Serie = g.Sum(row => Convert.ToInt32(row.Cells[2].Value)),
        Reps = g.Sum(row => Convert.ToInt32(row.Cells[3].Value) * Convert.ToInt32(row.Cells[2].Value)),
        Percent = (g.Sum(row => Convert.ToDecimal(row.Cells[2].Value)) / Convert.ToDecimal(label15.Text)) * 100
    });
}
catch (FormatException)
{
    //MessageBox.Show("Formato non corretto");
}

Voici à quoi devrait ressembler le DataGridView, s'il réussit ; dgv1 :

column 1 | column 2 |column 3
  2          3        group1
  3          5        group1
  4          6        group2
  3          4        group3

Et je vois ceci dans le résultat sur dgv2 :

    column 1 | column 2 |column 3
      5          8        group1
      4          6        group2
      3          4        group3

Mais si j'ajoute une valeur de chaîne dans column2 comme ceci :

column 1 | column 2 |column 3
  2          3        group1
  3          5        group1
  4        string     group2
  3          4        group3

Ensuite, je vois ceci dans le résultat sur dgv2 :

column 1 | column 2 |column 3
  5          8        group1
Guillemets

Bien que je ne sois toujours pas tout à fait sûr de la nature du problème, je vais essayer de répondre à votre question.

Tout d'abord, si vous n'êtes pas sûr à 100% qu'une cellule spécifique contient une valeur Int, vous ne devez pas simplement la convertir aveuglément.

Il existe des moyens de vérifier s'il s'agit d'un int avant de le convertir. Une façon est la suivante :


    try
{
    var Su = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(row => row.Cells[8].Value != null)
    .Where(row => row.Cells[2].Value != null)
    .GroupBy(row => row.Cells[8].Value.ToString()) 
    .Select(g => new
    {
        Gruppo = g.Key,
        Serie = g.Sum(row => {
            if(row.Cells[2].Value is int rowInteger)
                return rowInteger;

            // if it is not an integer then try to convert
            // return a default value (in this case -1) if it can't be converted
            else
            {
                try
                {
                    return Convert.ToInt32(row)
                }
                catch(Exception)
                {
                    return -1;
                }
            }
        },
        Reps = g.Sum(row => Convert.ToInt32(row.Cells[3].Value) * Convert.ToInt32(row.Cells[2].Value)),
        Percent = (g.Sum(row => Convert.ToDecimal(row.Cells[2].Value)) / Convert.ToDecimal(label15.Text)) * 100
    });
}
catch (FormatException)
{
    //MessageBox.Show("Formato non corretto");
}

Cela garantira que toutes les lignes sont conservées, mais que seules les lignes valides sont calculées.

Une approche plus simple, qui ne conservera pas le nombre de lignes d'origine, consiste à vérifier si la valeur de la cellule est un entier ou peut être convertie en un entier consiste à ajouter l' Whereinstruction suivante :

Where(row => row.Cells[2].Value is int || int.TryParse((row.Cells[2].Value as string), out var result))

Notez que vous analysez en fait la valeur à chaque itération et supprimez le résultat, c'est bien sûr loin d'être optimisé mais vous obtiendrez le résultat souhaité.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment ajouter une condition OR dans LINQ lors d'une requête XML?

Comment ajouter une condition where dans une requête SQL dynamique ?

Comment ajouter une condition dans une requête select ?

Comment ajouter une condition if dans cette requête?

Comment puis-je ajouter une condition WHERE sur un champ de texte dans une requête SQLite?

Mysql - Ajouter une condition if dans la requête Mysql ou une clause where

Comment placer une instruction If / Else dans une clause where dans une requête linq?

comment ajouter uniq dans une requête

Comment ajouter une condition (la mesure est supérieure à 0) dans une requête MDX

Comment ajouter dans une requête SQL une condition qui vérifie si ckeckboxe est coché?

Comment ajouter une condition where?

Ajouter une condition dans une requête SQL

Ajouter une clause Where de condition AND dans la requête SQL

Ajouter WHERE à la requête basée sur une condition

Comment ajouter une condition dans l'expression lambda linq

Comment puis-je ajouter une condition where dans SSRS ?

Comment ajouter une jointure différente dans une requête

Requête pour ajouter une condition de trimestre dans SQL

Comment ajouter une année à la requête LINQ to entity ?

Comment utiliser une condition if dans une requête ?

Comment puis-je ajouter une expression Where générée dynamiquement pour un objet navigable dans ma requête Linq-To-SQL?

Comment passer une expression dans une requête LINQ?

Comment donner un résultat de requête à une autre requête dans la condition where à l'aide de codeiginter?

Comment supprimer un caractère d'une requête SQL dans la condition where

Comment écrire une requête dans Entity Framework avec condition conditionnelle multiple where?

comment vérifier s'il y a des résultats dans une requête et ajouter une condition if / else

comment placer la clause WHERE conditionnelle dans une requête LINQ

Comment écrire OrderByDescending et la clause where dans une seule requête LinQ

Sql to linq (Comment écrire une requête Sql dans Linq)

TOP liste

  1. 1

    J'ai besoin de savoir si ces deux phrases sont les mêmes en programmation

  2. 2

    Javascript indiquant "impossible de définir la propriété 'innerHTML' sur null"

  3. 3

    Nextcloud avec Docker: impossible de créer ou d'écrire dans le répertoire de données

  4. 4

    La taille de la forme n'est pas égale à la taille de la cellule du tableau et ajuste le texte à l'intérieur de la forme

  5. 5

    Trouver l'intersection et l'union de deux rectangles

  6. 6

    Comment changer la couleur de la police dans R?

  7. 7

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  8. 8

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  9. 9

    Compter combien de fois un nombre apparaît dans un tableau aléatoire

  10. 10

    Pourquoi utiliser Asyncio ne réduit pas le temps d'exécution global en Python et n'exécute pas les fonctions simultanément?

  11. 11

    Comment convertir une chaîne en tuple en utilisant `reads`?

  12. 12

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  13. 13

    comment afficher un bouton au-dessus d'un autre élément ?

  14. 14

    Création d'un nouvel objet d'une classe avec un nouveau nom en cliquant sur un bouton dans java swing

  15. 15

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  16. 16

    Restauration de la sauvegarde de la base de données SQL Server sur la version inférieure

  17. 17

    Créer un graphique à barres avec une fréquence relative / à partir d'un objet de table dans R

  18. 18

    Création d'un rappel python pour une fonction C à partir d'une DLL avec un tampon char.

  19. 19

    java.lang.NoClassDefFoundError: org / springframework / data / repository / config / BootstrapMode

  20. 20

    comment le contrôle de tableau javascript devrait-il être

  21. 21

    impossible d'ouvrir un nouvel onglet dans react, ajoute localhost: 3000 sur le lien?

chaudétiquette

Archive