2013-08-14 2 views
3

Я просто научился использовать лямбда-выражения и был включен Dapper пару дней назад. Я работаю над приложением, которое заполняет listView с именами пользователей, которые будут выбраны для обслуживания некоторых учетных записей. У меня возникли проблемы с одной стороны сортировки:Выделить все из коллекции Где ID в списке

  • Я получаю коллекцию объектов с использованием Dapper запроса и присвоения его переменной Global.allUsers.
  • У меня есть список идентификаторов (List<int> migrated), которые уже были использованы, и поэтому не должен появляться в listView
  • Я получаю список всех моих пользователей, используя следующий:

    var uniqUsers = Global.allUsers.OrderBy(n => n.lastNames).GroupBy(q => q.salesIDs); 
    

для заполнения listView лишь пользователи, которые не мигрировали, мне нужно выбрать только те пользователи без q.salesIDs в migrated. Я просто не могу понять, могу ли я сделать это, не используя своего рода foreach. Похоже, должен быть способ выбрать его.

В любом случае, я прохожу через uniqUsers и заполняю listView значениями свойств каждого объекта. Я могу добавить инструкцию, чтобы проверить, находится ли текущий идентификатор в migrated, но моя кишка просто говорит мне, что я могу сделать это с помощью оператора select и сохранить себе шаг.

Я думаю, что-то вроде этого:

var uniqUsers = Global.allUsers.Where(i => i.salesIDs not in migrated).OrderBy(n => n.lastNames).GroupBy(q => q.salesIDs); 

но i => i.salesIDs not in migrated не разрезая его.

+0

Чувство перерыва произошло. –

+0

В отличие от сайтов на форуме, мы не используем «Спасибо» или «Любая благодарность» или подписи на [so]. См. «[Запрещены ли теги и подписи?] (Http://meta.stackexchange.com/questions/5029/are-taglines-signatures-disallowed)» и «[Должны« Привет »,« спасибо », теги и приветствия удаляться из сообщений?] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts). –

ответ

3

Это делает то, что вам нужно:

var uniqUsers = allUsers.Where(x => migrated.Contains(x.salesIDs)) 
         .OrderBy(y => y.lastNames) 
         .GroupBy(z => z.salesIDs).SelectMany(v => v).ToList(); 

Возвращает всех пользователей, где salesID в migrated, то заказы по lastNames и затем группы по salesID. SelectMany() проецирует элементы в последовательность, ToList() будет перечислять результаты.

+0

Спасибо, @DGibbs! Я понял , хотя я испортил свой пример. Твои работы, если я хочу, чтобы все в «мигрировало», что и показал мой пример. Могу ли я отрицать предложение 'Where' ?, где не содержит'? – tmoore82

+0

Nm. Просто нашел его. 'var uniqUsers = Global.allUsers.Where (i =>! migrated.Contains (i.salesIDs)). OrderBy (n => n.lastNames) .GroupBy (q => q.salesIDs);' Спасибо !!! – tmoore82

+1

Да, вы можете свести на нет условие с помощью оператора '!'. Хотя эта строка в вашем операторе немного запутанна, «мне нужно выбрать только тех пользователей с q.salesIDs в migrated», что указывает на обратное. – DGibbs