2010-12-16 17 views
5

Estoy utilizando Linq para DataTable. Cómo puedo aplicar like operator en where clause. Quiero hacer una búsqueda de datos del mismo modo que tenemos operador en SQL.¿Te gusta el operador en Linq a DataTable?

He buscado y probado el siguiente código, pero da un error: Método 'booleana gusta (System.String, System.String)' no puede ser utilizado en el cliente; es solo para traducción a SQL.

var details = from addresses in dt.AsEnumerable() 
    where SqlMethods.Like(prefixText, prefixText + "%") || SqlMethods.Like(prefixText, "%" + prefixText + "%") 
    select (string) addresses["Details"];      

return details.ToArray(); 

Respuesta

2

Que este enlace ¿ayuda? Linq to SQL like Operator

+0

esta publicación muestra 2 formas. .contain no devuelve resultados correctos y SqlMethods solo funciona con SQL. Supongamos que tengo valores de ABC, ABC And Company, BAC, ABC Associates. El uso contiene devoluciones incluso BAC, si lo paso debería devolver todo pero no BAC. por favor guía. - – haansi

4

Su mejor opción puede ser la de volver a escribir como una expresión regular un uso

where yourRegex.IsMatch(row.SomeValue) 

O si es sólo comienza-con consultas:

where row.SomeValue.StartsWith(prefix) 
+0

Gracias Marc, lo siento, no estoy al tanto de las expresiones regulares. ¿Puedes por favor guiar cuál será la expresión regular para este sql donde clasue "donde companyname like @string + '%' o companyname como '%' + @ string + '%'"; Gracias – haansi

+1

@haansi - no hay necesidad de expresiones regulares allí; solo use donde row.CompanyName.Contains (someName) –

+0

@Marc Lo probé antes, pero no está devolviendo los resultados correctos. Supongamos que tengo valores de ABC, ABC And Company, BAC, ABC Associates. Usarlo devuelve incluso BAC, si lo paso debería devolver todo pero no BAC. por favor guía. – haansi

3
var details = from addresses in dt.AsEnumerable() 
       where addresses.Field<string>("Details").StartsWith(prefixText) 
       || addresses.Field<string>("Details").Contains(prefixText) 
       select addresses.Field<string>("Details"); 
+0

contiene no devuelve resultados correctos. Supongamos que tengo valores de ABC, ABC And Company, BAC, ABC Associates. Usarlo devuelve incluso BAC, si lo paso debería devolver todo pero no BAC. por favor guía. - – haansi