ti-enxame.com

Como em Lambda Expression e LINQ

Como posso fazer algo assim:

customers.where(c=>c.Name **like** "john");

Eu sei que isso não é possível, mas eu queria saber como posso ter algo semelhante.

38
Stacker
customers.Where(c => c.Name.Contains("john"));
70
Tom Vervoort

Se você estiver direcionando LINQ para SQL, use SqlMethods.Like :

customers.Where(c => SqlMethods.Like(c.Name, "%john%")); 

Explicação:

O compilador irá gerar uma árvore de expressão a partir da instrução acima. Como LIKE é uma construção específica do SQL e não é comum a todos os provedores de Consulta LINQ, a classe SqlMethods e seus membros são usados ​​como uma "dica" para o compilador de expressões (compila árvores de expressão no SQL) para emitir uma instrução LIKE.

30
Johannes Rudolph

O primeiro pensamento que vem à mente é Regex.IsMatch .

Isso seria mais próximo de fornecer o tipo de funcionalidade que você obtém de LIKE; por exemplo, com isso você poderia fazer o seguinte:

var matches = people.Where(p => Regex.IsMatch(p.Name, "A.*[mn]"));

foreach (Person match in matches)
{
    Console.WriteLine(match.Name);
}

E obtenha resultados como este:

 Adam 
 Aaron 
 Aidan 

Indo com string.Contains como outros sugeriram é quase certamente preferível se sua intenção é simplesmente procurar uma substring específica dentro de Name.

9
Dan Tao
using System.Data.Linq.SqlClient;
...
customers.where(c=>SqlMethods.Like(c.Name, "john"));
5
Andrei

Usar Regex.IsMatch na sua declaração where ou para uma versão mais simples sem caracteres curinga, etc .:

customers.where(c=>c.Name.Contains("john"));
2
bitbonk

Aqui está o meu código:

string s="somethings";

customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));

Algo assim.

1
asalam345