2012-06-14 10 views
6

Tengo una matriz de ID que quiero pasar al marco de la entidad a través de una consulta LINQ a devolver los partidosmediante LINQ para consultar Int Ids de una matriz

He escrito las consultas LINQ que pueden convertir identificadores de cadenas y utilizar el 'Contiene' operador, tales como:

Modelo

public class Order { 
    public long OrderId { get; set; } 
    public string Name { get; set; } ...} 

Order[] orders = { new Order { OrderId = 123, Name = "Order1" }, new Order {...},...}; 

para el que puedo usar algo como:

long[] testArray = {123, 456}; 

y luego

var result = orders.Where(i => testArray.ToString().Contains(i.OrderId.ToString())); 

pero lo que realmente necesita para mantener los identificadores de fundición en cadenas? Parece que no puedo acceder a 'Contiene' si los guardo como enteros.

En última instancia, quiero poder usar esto como parte de una consulta que accede al Entity Framework y así pasar la consulta como parte de un IQueryable <> para asegurarme de que no estoy devolviendo resmas de datos cuando solo quiero un puñado, como por ejemplo:

var orders = _repo.Orders().Where(i => orderArray.Contains(i.OrderId)); 

lo que cualquier solución que sería útil si los Parámetros de consulta (el conjunto int) a través de la EF en lugar de obtener todos los datos y después de comprobar en la memoria.

¡Salud!

+3

Este es el tipo de cosas que hago con EF ... órdenes var = _repo.Orders() que (i => orderArray.Contains (i.OrderId)); me parece bien. ¿Cuál es el problema exactamente? – Kek

+0

@Kek: No creo que puedas usar listas/matrices locales cuando consultes EF – Jan

+1

mmm Yo diría que puedes. La lista se enumerará y se transformará en una lista de (id = Cste) O ... No veo el problema – Kek

Respuesta

16

pero ¿Es realmente necesario para mantener los identificadores de fundición en cadenas

Por supuesto que no

. No está claro lo que bars es, pero suponiendo que realmente debe ser orders, se puede utilizar:

var result = orders.Where(i => testArray.Contains(i.OrderId)); 

o realizar una combinación:

var result = orders.Join(testArray, o => o.OrderId, id => id, (o, id) => o); 
+0

no estoy seguro de por qué no funcionó cuando lo hice esta primera vez. gracias por tu respuesta – GrahamJRoy

0

puede utilizar el operador de intersección lugar, ¿por qué se utiliza matrices y no listas? ejemplo. código:

 public class Order { 
    public long OrderId { get; set; } 
    public string Name { get; set; }} 


    public class Rep 
    { 
     private List<Order> orders { get; set; } 

     public void Q() 
     { 
      long[] testArray = {123, 456}; 
      var res = orders.Intersect(orders); 
     } 
    } 
Cuestiones relacionadas