2010-09-20 4 views
2

Le code ci-dessous est incorrect mais l'idée ici est que je veux saisir des valeurs de "SqlTable" où la valeur de "Field" est à l'intérieur de "Array []".Requête Linq si le champ est dans un tableau?

var Result = 
    from a in SqlTable 
    where a.Field is in Array[] 
    select a; 

Répondre

6

Vous devriez pouvoir utiliser le Queryable.Contains Extension Method:

var result = 
    from a in mySqlTable 
    where myArray.Contains(a.Field) 
    select a; 

Voir aussi: Creating IN Queries With Linq To Sql

+0

ou "où Array.IndexOf (myArray, a.Field)> -1 " – Floyd

+0

@Floyd: Cela fonctionne si vous utilisez LINQ-to-Objects, mais je ne sais pas si c'est le cas lorsque vous utilisez LINQ-to-SQL. – dtb

+0

@Floyd oui qui fonctionne, mais il est laid – msarchet

0

Je suppose maintenant que le terrain et Array [] contient des valeurs qui a un opérateur d'égalité dans placer, et que le A. Ensuite, vous pouvez l'écrire comme ceci:

var Result = 
    from a in SqlTable 
    where Array[].Any(ae => ae == a.Field) 
    select a; 
+0

Cela devrait fonctionner mais c'est tellement lent – Floyd

+0

Est-ce que tout sera vraiment plus lent que Contient? –

+1

Je pense, parce que les Contians utilisent Array.IndexOf et cela interate le tableau et compare avec des equals. Tout intercepte le tableau et exécute le délégué. – Floyd

Questions connexes