Выберите Все, которые еще не существуют в пункте назначения - PullRequest
1 голос
/ 28 декабря 2011

У меня есть простой набор массивов, вроде этого .. структура сокращена для краткости и тому подобное. По сути это список тождеств с дополнительным полем (своего рода словарь).

[
 { 
   "Id" : 1, 
   "Requirement" : { 
     "Value" : "2", "Name" : "Orders" 
    }
 },
 { 
   "Id" : 2, 
   "Requirement" : { 
     "Value" : "4", "Name" : "Orders" 
    }
 },
 { 
   "Id" : 3, 
   "Requirement" : { 
     "Value" : "6", "Name" : "Orders" 
    }
 },
 { 
   "Id" : 4, 
   "Requirement" : { 
     "Value" : "8", "Name" : "Orders" 
    }
 },
]

Мне нужно постоянно проверять другое значение в этом массиве и извлекать элементы, которые удовлетворяют (например, «пользователь» имеет произвольное значение Orders, которое является целым числом. Каждый раз, когда Orders обновляется Я хочу получить все элементы из массива, где Orders больше или равно значению требования, но без извлечения значений, которые у них уже есть)

Итак, это будет работать следующим образом ... User имеет 1 Order. (Ничего не произошло) User имеет 2 Order. (Идентификатор 1 извлекается при выполнении операции обновления пользователя) User затем достигает 4 Order. (Идентификатор 2 выдвинут, но идентификатор 1 уже существует, поэтому он пропускается)

Есть ли упрощенный способ добиться этого с помощью запроса LINQ? Я не могу позволить себе роскошь хранить «последнее проверенное» значение. Структура данных не та, которую я могу изменить на данный момент.

Ответы [ 2 ]

1 голос
/ 28 декабря 2011
Orders.Where(o => o.Requirement.Value > requirment).Except(processedOrders);

Сначала выберите Orders, который соответствует требованию, затем с помощью Except удалите заказы, которые уже были обработаны.

1 голос
/ 28 декабря 2011

Вы можете использовать метод Any для проверки значений не в другом массиве:

myArray.Where(o => !otherArray.Any(inner => inner.id == o.id));
...