2012-06-14 7 views
6

ich ein Array von Ids, die ich an den Entity Framework über eine Linq-Abfrage übergeben wollenLINQ Int Ids zur Abfrage von einem Array

Streichhölzer zurückzukehren

ich Linq Abfragen geschrieben haben, die Ids in Strings umwandeln und verwenden Sie den 'Enthält' Betreiber, wie zum Beispiel:

Modell

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

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

, für die ich so etwas wie verwenden:

long[] testArray = {123, 456}; 

und dann

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

aber tun wirklich die Ids Gießen müssen halten ich Strings? Es sieht so aus, als ob ich nicht auf 'Contains' zugreifen kann, wenn ich sie als Ints behalte.

Letztendlich möchte ich in der Lage sein, dies als Teil einer Abfrage zu verwenden, die auf das Entity Framework zugreift und die Abfrage als Teil eines IQueryable <> übergibt, um sicherzustellen, dass ich keine riesigen Datenmengen zurückgebe, wenn ich nur möchte eine Handvoll, wie zum Beispiel:

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

jede Lösung so wäre es sinnvoll sein, wenn die Abfrage params (der int-Array) durch die EF anstatt all Daten bekommen und dann im Speicher zu überprüfen.

Prost!

+3

Dies ist die Art von Dingen, die ich mit EF tun ... var orders = _repo.Orders() Wo (i => orderArray.Contains (i.OrderId)); scheint mir gut. Was ist das Problem genau? – Kek

+0

@Kek: Ich glaube nicht, dass Sie lokale Listen/Arrays bei der Abfrage von EF verwenden können – Jan

+1

mmm Ich würde sagen, Sie können. Die Liste wird enumeriert und in eine Liste von (id = Cste) OR umgewandelt ... Ich sehe das Problem – Kek

Antwort

16

aber muss ich wirklich halten die Ids Casting

Absolut nicht reiht. Es ist nicht klar, was bars ist, aber es unter der Annahme, wirklich orders sein sollte, könnten Sie verwenden:

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

oder führen Sie eine Verknüpfung:

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

nicht sicher, warum es nicht funktionierte, wenn ich dieses erste Mal tat. Danke für deine Antwort – GrahamJRoy

0

können Sie den Intersect Operator stattdessen, warum tun Sie verwenden Arrays und keine Listen? . Codebeispiel:

 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); 
     } 
    } 
Verwandte Themen