Como fazer um "Not In" no Linq
-
quinta-feira, 12 de julho de 2012 19:50
Gente como faço um select que tenha "Not In" no Linq? Gostaria de fazer um select como esse:
select cd_pedido from pedido where cd_pedido not in (select cd_pedido from itens_pedido)
Ercília
Todas as Respostas
-
quinta-feira, 12 de julho de 2012 22:32
Podes usar o Contains no caso de ser uma igualdade directa, por exemplo:
var items1 = new string[] { "a", "b", "c", "d", "e" }; var items2 = new string[] { "b", "d" }; var result = items1.Where(x => !items2.Contains(x)); foreach (var item in result) { Console.WriteLine(item); }O resultado será "a", "c" e "e"
No caso de teres que fazer algum tipo de transformação ou não se tratar de uma igualdade directa, o Any será outra solução:
var items1 = new string[] { "a", "b", "c", "d", "e" }; var items2 = new string[] { "b", "d" }; var result = items1.Where(x => !items2.Any(y => x == y)); foreach (var item in result) { Console.WriteLine(item); }Como podes ver, aqui estou a forçar o tipo de igualdade a realizar (mas que acaba por ser os mesmo resultados do primeiro exemplo!)
Pedro Lamas
DevScope | Senior Software Development Engineer & WP7 Development Speaker
www.pedrolamas.com | @pedrolamas- Marcado como Resposta Ercília segunda-feira, 16 de julho de 2012 20:22
-
segunda-feira, 16 de julho de 2012 13:47Então seria dessa forma: "var query = ctx.PEDIDOs.Where(p => !ctx.ITENS_PEDIDOs.Contains(p));". Só que assim está dando erro, qual o problema nesse código?
Ercília
-
segunda-feira, 16 de julho de 2012 15:45No teu caso o Contains não deve ser possível de aplicar, dado que me leva a crer que PEDIDOs é de um tipo de dados, e ITENS_PEDIDOs é de outro tipo; neste caso utilizaria a abordagem do Any e comparava as chaves (ID's) ou algo do género!
Pedro Lamas
DevScope | Senior Software Development Engineer & WP7 Development Speaker
www.pedrolamas.com | @pedrolamas

