Предположим, у вас есть поддельный список с вашими данными:
var orderDetails = new List<OrderDetail>
{
new OrderDetail{ ID = 1, Item = "TV", OrderID = "00001", Status = "Shipped"},
new OrderDetail{ ID = 2, Item = "TABLET", OrderID = "00001", Status = "Shipped"},
new OrderDetail{ ID = 3, Item = "BLURAYPL", OrderID = "00002", Status = "NotShipped"},
new OrderDetail{ ID = 4, Item = "MOBILEPH", OrderID = "00002", Status = "Shipped"},
new OrderDetail{ ID = 5, Item = "XBOX", OrderID = "00002", Status = "Shipped"},
new OrderDetail{ ID = 6, Item = "PAPER", OrderID = "00003", Status = "Shipped"},
new OrderDetail{ ID = 7, Item = "PENCIL", OrderID = "00003", Status = "Shipped"}
};
Тогда ваш запрос linq должен выглядеть следующим образом:
var result = orderDetails
.GroupBy(o => o.OrderID)
.Where(g => g.All(i => i.Status == "Shipped"))
.Select(g => g.Key);
так что вы получите пару строк - "00001" and "00003"
в результате.
Следовательно, для реального запроса к БД вы можете написать что-то вроде этого:
dbContext.OrderDetails
.Where(o => WashingtonClients.Contains(o.CustomerID))
.GroupBy(o => o.OrderID)
.Where(g => g.All(i => i.Status == "Shipped"))
.Select(g => g.Key);