2010-01-06 12 views
5

Aquí está mi códigoCómo utilizar LINQ y la cláusula EN

if (catid != 0) 
      posts = posts.Where(x => x.catid IN '1,8,2,109,23'); 

El en en este código se muestra como un error de sintaxis. ¿Hay alguna manera de arreglar esto?

Respuesta

8

Debe utilizar otra lista para comparar también.

List<int> cadIdFoundList = new List<int>(); 

cadIdFoundList.Add(1); 
cadIdFoundList.Add(8); 
// etc. . . 

posts.Where(x => cadIdFoundList.Contains(x.catId)); 
+0

fresca. Gracias ... Funciona – Luke101

5
int[] ids = new int[] { 1, 8, 2, 109, 23 }; 
var query = posts.Where(x => ids.Contains(x.catid)); 

Rob Connery tiene discussed este tema antes.

2

O aún más simple:

var query = posts.Where(x => new[] { 1, 8, 2, 109, 23 }.Contains(x.catid)); 
+0

Es una pena que hayamos puesto ese nuevo [] allí. ¿No sería genial si pudiéramos hacer {1, 7, 3, 5} .Contiene en su lugar? :RE –

1

Tal vez algo más como:

HashSet<int> categories = new HashSet<int>() { 1, 2, 8, 23, 109}; 
posts = posts.Where(post => categories.Contains(post.catid)); 
Cuestiones relacionadas