2013-01-10 4 views
108

목록이 orders입니다.
주문 상태 집합을 기준으로 orders을 선택하고 싶습니다.목록에있는 Linq 선택 개체 IN (A, B, C)

그래서 본질적으로 select orders where order.StatusCode in ("A", "B", "C")

// Filter the orders based on the order status 
var filteredOrders = from order in orders.Order 
        where order.StatusCode.????????("A", "B", "C") 
        select order; 

많은 감사합니다.

+0

사용 기능이 포함되어 있습니다. – Zaki

+0

너무 빨리 답변 해 주신 모든 분들께 감사드립니다. Esp는 람다 솔루션입니다. 나는 아직 람다 식으로 아무 것도하지 않았다. 내가 사용하지 않는다고 가정합니다 (o =>! (statuses.Contains (o.OrderHeaderOrderStatusCode)))) – MartinS

답변

187

귀하의 상태 - 코드는 모음입니다, 그래서 사용 Contains :

var allowedStatus = new[]{ "A", "B", "C" }; 
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode)); 

또는 쿼리 구문에

:

var filteredOrders = from order in orders.Order 
        where allowedStatus.Contains(order.StatusCode) 
        select order; 
11
var statuses = new[] { "A", "B", "C" }; 

var filteredOrders = from order in orders.Order 
          where statuses.Contains(order.StatusCode) 
          select order; 
8

Contains 기능을보십시오;

시퀀스에 지정된 요소가 포함되는지 여부를 결정합니다.

var allowedStatus = new[]{ "A", "B", "C" }; 
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode)); 
7

NB :이 객체에 LINQ, 내가 생각이 엔티티에 LINQ에서 작동하고, 지금 그것을 확인하는 시간이없는 경우 100 % 확인합니다. 사실 x [A, B, C]으로 번역하는 것은 그리 어렵지 않지만 직접 확인해야합니다.

따라서 대신 을 대체하여을 포함하고 있습니까?

// Filter the orders based on the order status 
var filteredOrders = from order in orders.Order 
        where new[] { "A", "B", "C" }.Any(s => s == order.StatusCode) 
        select order; 

그것은 반대가 분명하지 않은 이유가 무엇인지 당신은 SQL 알고에의 : 코드에서 당신은 더 많은 LINQ-uish입니다 모든를 사용할 수 있습니다. 여기에 유창 구문을 선호하는 경우

물론, 그것은이다

여기
var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode)); 

우리가 다시 (마지막에 선택두고 Joda 음성 같은) LINQ의 놀라움 중 하나를 참조하십시오. 그러나 목록 (집합, 컬렉션)에서 적어도 하나의 항목 (즉, )이 하나의 값과 일치하는지 확인하는 것은 매우 논리적입니다.