source

Linkq 목록에서 존재하는 개체 선택(A,B,C)

ittop 2023. 4. 27. 22:46
반응형

Linkq 목록에서 존재하는 개체 선택(A,B,C)

의 목록이 있습니다.orders.
선택합니다.orders일련의 주문 상태를 기준으로 합니다.

그래서 본질적으로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;

상태 코드도 모음이므로 다음을 사용합니다.

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;

NB: 이것은 객체에 대한 LINQ입니다. 엔티티에 대한 LINQ에서 작동하는지 100% 확신할 수 없으며 지금 당장 확인할 시간이 없습니다.사실 [A,B,C]에서 x로 번역하는 것은 그리 어렵지 않지만, 직접 확인해야 합니다.

그래서, ?를 대체하는 Contains 대신에?코드에서 LINQuish가 더 많은 Any를 사용할 수 있습니다.

// 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에서 알고 있는 것과는 반대로, 이것이 명확하지 않은 이유입니다.

물론 여기서 유창한 구문을 선호한다면 다음과 같습니다.

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

여기서 다시 LINQ의 놀라운 점 중 하나를 확인할 수 있습니다(마지막에 선택을 입력하는 Joda-speech와 같은 것).그러나 목록(set, collection)의 항목 중 하나 이상이 단일 값과 일치하는지 확인한다는 점에서 매우 논리적입니다.

var statuses = new[] { "A", "B", "C" };

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

기능을 사용해 보십시오.

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

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

조심해..Contains()예상치 못한 문자열을 포함하여 모든 하위 문자열과 일치합니다.예를 들면. new[] { "A", "B", "AA" }.Contains("A")당신이 원하지 않을 수도 있는 A와 AA를 둘 다 돌려줄 것입니다.저는 그것에 물렸습니다.

.Any()또는.Exists()더 안전한 선택

언급URL : https://stackoverflow.com/questions/14257360/linq-select-objects-in-list-where-exists-in-a-b-c

반응형