2012-01-12 7 views
8

Uso primero el código de Entity Framework. Quiero consultar las entidades de la base de datos contra los objetos de la lista. Esto funciona bien con contiene, pero ¿cómo puedo combinarlo con StartsWith?Entity Framework 4.1 Linq contiene y comienza con

Este es mi código:

List<string> values = new List<string>(); 
values.Add("A"); 
values.Add("B"); 
context.Customer.Where(c => values.Contains(c.Name)).ToList(); 

¿Cómo puedo consultar contra todos los clientes que comienza con A o B?

Respuesta

10

Esto debería funcionar en la memoria, pero no estoy seguro de si se podría traducir en SQL por EF:

context.Customer.Where(c => values.Any(s => c.Name.StartsWith(s))).ToList(); 
+0

fiyi update lamentablemente con ef core esto se evalúa localmente advertir: Microsoft.EntityFrameworkCore.Query [20500 ] La expresión LINQ 'where {from String text in __texts_0 where [d] .Entry.StartsWith ([text]) select [text] => Any()}' no se pudo traducir y se evaluará localmente. –

+0

@AnthonyJohnston [Esto puede estar relacionado] (https://stackoverflow.com/a/44372562/335858) – dasblinkenlight

2

No necesita combinarlo con StartsWith, ya que si comienza con A o B, obviamente contiene A o B. No puede comenzar con A o B y no contiene A o B.

Así que solo use StartsWith en lugar de Contains.

context.Customer.Where(c => c.StartsWith("A") || c.StartsWith("B")).ToList(); 
+0

No estoy usando String.Contains() pero List.Contains(). Tu solución funciona, pero no es dinámica. P.ej. consulta contra A-K. – LuckyStrike

+1

@ LuckyStrike - Sugeriría que si tiene tales requisitos, los incluya en su pregunta. De lo contrario, solo desperdicia el tiempo de todos rechazando soluciones que no podrían haber sabido que no eran lo que estabas buscando. –

0

Usted puede tratar de combinar las dos funciones de esta manera:

IQueryable<Customer> result = (from C in context.Customerwhere C.Name.StartsWith("B") && values.Contains(C.Name)); 
+0

Le falta un espacio desde C en 'context.Customerwhere' debe ser de C en' context.Customer where' –

Cuestiones relacionadas