Pergunta sobre linq, dynamic, c#, .net – System.Linq.Dynamic - Posso usar a cláusula IN na instrução WHERE

12

Eu tenho a instrução linq WHERE dinâmica:

<code>dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
</code>

Eu quero mudar para:

<code>dataContext.Table.Where("id IN (0, 1, 2, ...)");
</code>

Mas isso não funciona. Como posso fazer isso para um melhor desempenho?

Sua resposta

3   a resposta
10

DeComo usar “contains” ou “like” em uma consulta dinâmica de linq?

<code>//edit: this is probably broken, see below
ids = new int[] {1,2,3,4};
dataContext.Table.Where("id.Contains(@0)", ids);
</code>

Aparte: É uma boa prática usar espaços reservados em expressões linq dinâmicas. Caso contrário, você pode se abrir para ataques de injeção de linq (A injeção é possível através do LINQ dinâmico?)

EDITAR:

na verdade eu acho que estraguei tudo. Infelizmente não posso testar isso no momento. Mas eu acho que a sintaxe correta neste caso deve serdataContext.Table.Where("@0.Contains(id)",ids);, e não o contrário, e essa versão nãonão trabalhe fora da caixa.

VejoAqui para uma maneira de adicionar essa funcionalidade ao link dinâmico. Você precisa modificar a biblioteca para isso.

5
<code>var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
</code>
Obrigado, eu sei disso, mas o nome da coluna "id" está mudando. Eu recebo esta coluna dinamicamente. Então eu não posso usar Linq estático. Eu tenho que usar biblioteca linq dinâmica para string onde clausule como exemplo.Linq dinâmico Pavel Jedlicka
@Ingenu, leia o recurso e você descobrirá o que é Dynamic Linq Adrian Iftode
4

parece que na versão 1.0.4 do System.Linq.Dynamic, podemos usar a seguinte sintaxedataContext.Table.Where("@0.Contains(<b>outerIt</b>.id)",ids); como foi feito e apresentado no blog já citado:Aqui

Perguntas relacionadas