2017-09-06 2 views
1

Ich versuche, Aufträge zu filtern, die Lieferung nicht einen Ereignistyp hat und das funktioniert gut.Wie EXIST verwenden und NOT EXIST-Klausel Ausdruck mit Lambda

List<Order> matchingOrders = xyzContext.Orders.Where(
        o => o.FacilityId == facility.MasterFacilityId 
        && rxNumberList.Contains(o.RxNumber) 
        && o.OrderEvents.All(oe => oe.EventType.Code != EventTypeCode.Delivered)).ToList(); 

Danach versuche ich, Aufträge zu filtern, die Event-Typ „bestellt“ hat und Ereignistyp „Delivered“ nicht haben, und ich bin nicht erwartete Ergebnis bekommen.

List<Order> matchingOrders = xyzContext.Orders.Where(
        o => o.FacilityId == facility.MasterFacilityId 
        && rxNumberList.Contains(o.RxNumber) 
        && o.OrderEvents.All(oe => oe.EventType.Code != EventTypeCode.Delivered && oe.EventType.Code == EventTypeCode.Ordered)).ToList(); 
+0

Dieser Code sollte wie folgt geschrieben arbeiten. Möglicherweise liegt ein Grundproblem bei der Verwaltung der Codewerte vor. –

+0

Was bekommen Sie stattdessen? Außerdem: Was ist 'EventTypeCode'? Ist es eine bitweise kombinierte Enum oder enthält es nur einen einzigen Enum-Wert? – HimBromBeere

+0

@HimBromBeere EventTypeCode ist eine Enumeration, die viele Ereignistypcodes und Beschreibungen enthält. – alkprksh

Antwort

0

versuchen this out:

List<Order> matchingOrders = xyzContext.Orders.Where(
       o => o.FacilityId == facility.MasterFacilityId 
       && rxNumberList.Contains(o.RxNumber) 
       && o.OrderEvents.All(oe => oe.EventType.Code != EventTypeCode.Delivered) 
       && o.OrderEvents.Any(oe.EventType.Code == EventTypeCode.Ordered)).ToList();