115 votes

Existe-t-il un opérateur IN en C# ?

En SQL, vous pouvez utiliser la syntaxe suivante :

SELECT *
FROM MY_TABLE
WHERE VALUE_1 IN (1, 2, 3)

Existe-t-il un équivalent en C# ? L'IDE semble reconnaître "in" comme un mot-clé, mais je ne parviens pas à trouver d'informations à ce sujet.

Alors, est-il possible de faire quelque chose comme ce qui suit :

int myValue = 1;
if (myValue in (1, 2, 3))
    // Do something

Au lieu de

int myValue = 1;
if (myValue == 1 || myValue == 2 || myValue == 3)
    // Do something

0 votes

Je l'ai modifié un peu pour clarifier ce que j'essayais de comparer.

0 votes

Vérifier une autre réponse ajoutée par moi

0 votes

Cette question a déjà été posée plusieurs fois sur stackoverflow...

154voto

Andy Robinson Points 2299

Si vous voulez écrire .In, vous pouvez créer une extension qui vous permet de le faire.

static class Extensions
{

    public static bool In<T>(this T item, params T[] items)
    {
        if (items == null)
            throw new ArgumentNullException("items");

        return items.Contains(item);
    }

}

class Program
{

    static void Main()
    {

        int myValue = 1;

        if (myValue.In(1, 2, 3))
            // Do Somthing...

        string ds = "Bob";

        if (ds.In("andy", "joel", "matt")) 
        // Do Someting...
    }
}

5 votes

N'oubliez pas d'ajouter l'utilisation de System.Linq ;

4 votes

In est tellement plus agréable à lire qu'il ne contient... Plus facile à comprendre

4 votes

Même version sans lever l'exception : return items?.Contains(item) ?? false;

88voto

this. __curious_geek Points 23728

List.Contains() est je pense ce que vous recherchez. C# a in keyword et non un operator qui sert un objectif complètement différent de celui auquel vous vous référez en SQL.

Il y a deux façons d'utiliser in en C#. Supposons que vous ayez une chaîne[] ou une liste en C#.

        string[] names; //assume there are some names;

        //find all names that start with "a"
        var results = from str in names
                      where str.StartsWith("a")
                      select str;

        //iterate through all names in results and print
        foreach (string name in results)
        {
            Console.WriteLine(name);
        }

En me référant à votre édition, je mettrais votre code de cette façon pour faire ce dont vous avez besoin.

        int myValue = 1;
        List<int> checkValues = new List<int> { 1, 2, 3 };

        if (checkValues.Contains(myValue))
            // Do something

4 votes

Les gens voient SQL et sautent instantanément à LINQ, mais cette simple fonction est probablement exactement ce qu'il veut

7voto

Daniel Points 7960

Il n'y a pas d'opérateur "in" en C#, le mot-clé "in" est utilisé uniquement avec "foreach (... in ...)" ou "from ... in ...".

L'équivalent LINQ de votre requête SQL serait :

List<int> list = new List<int> { 1, 2, 3 };
var query = from row in my_table
            where list.Contains(row.value1)
            select row;

7voto

luckyluke Points 1306

Vous utilisez généralement le Contains d'une collection.

myCollection.Where(p => Enumerable.Range(1,3).Contains(p));

J'espère que cela vous aidera.

4voto

Pranay Rana Points 69934

Duplicata de : LINQ to SQL en et pas en

select * from table where fieldname in ('val1', 'val2') 

ou

select * from table where fieldname not in (1, 2) 

L'équivalent des requêtes IN et NOT IN dans LINQ to SQL serait quelque chose comme ceci :

List<string> validValues = new List<string>() { "val1", "val2"}; 
var qry = from item in dataContext.TableName 
          where validValues.Contains(item.FieldName) 
          select item; 

et ceci :

List<int> validValues = new List<int>() { 1, 2}; 
var qry = from item in dataContext.TableName 
          where !validValues.Contains(item.FieldName) 
          select item;

0 votes

Oui - désolé, j'ai modifié ma question, car ce que je demande n'a rien à voir avec linq.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X