2012-06-14 16 views
6

Tôi có một mảng của Id mà tôi muốn vượt qua khuôn khổ thực thể thông qua một truy vấn LINQ to trả lại bất kỳ trận đấuSử dụng LINQ để truy vấn Int Ids từ một mảng

Tôi đã viết các truy vấn LINQ mà có thể chuyển đổi Id để dây và sử dụng 'có' nhà điều hành, chẳng hạn như:

mẫu

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

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

mà tôi có thể sử dụng một cái gì đó như:

long[] testArray = {123, 456}; 

và sau đó

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

nhưng tôi có thực sự cần phải tiếp tục truyền Id tới chuỗi không? Có vẻ như tôi không thể truy cập vào 'Chứa' nếu tôi giữ chúng dưới dạng int. Cuối cùng, tôi muốn có thể sử dụng điều này như là một phần của truy vấn truy cập Khung thực thể và vì vậy chuyển truy vấn như một phần của IQueryable <> để đảm bảo rằng tôi không trả lại dữ liệu khi tôi chỉ muốn một handfull, chẳng hạn như:

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

vì vậy, bất kỳ giải pháp nó sẽ có ích nếu params truy vấn (mảng int) thông qua EF thay vì nhận được tất cả các dữ liệu và sau đó kiểm tra nó trong bộ nhớ.

Chúc mừng!

+3

Đây là loại điều tôi làm với EF ... var lệnh = _repo.Orders() Trường hợp (i => orderArray.Contains (i.OrderId)); có vẻ tốt với tôi. Vấn đề chính xác là gì? – Kek

+0

@Kek: Tôi không nghĩ rằng bạn có thể sử dụng danh sách/mảng cục bộ khi truy vấn EF – Jan

+1

mmm Tôi muốn nói rằng bạn có thể. Danh sách sẽ được liệt kê và chuyển thành danh sách (id = Cste) HOẶC ... Tôi không thấy vấn đề – Kek

Trả lời

16

nhưng làm tôi thực sự cần phải giữ đúc Id thành các chuỗi

Tuyệt đối không. Nó không rõ ràng bars là gì, nhưng giả sử nó thực sự nên orders, bạn có thể sử dụng:

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

hoặc thực hiện một tham gia:

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

không chắc chắn tại sao nó không hoạt động khi tôi thực hiện lần đầu tiên. cảm ơn câu trả lời của bạn – GrahamJRoy

0

bạn có thể sử dụng toán tử Intersect thay vào đó, tại sao bạn sử dụng mảng và không phải danh sách? . mã ví dụ:

 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); 
     } 
    } 
Các vấn đề liên quan