2013-04-19 5 views
1

У меня есть список и DataTable, который содержит столбец, соответствующий идентификаторам в списке. Мне нужно идентифицировать все ID в моем списке, которых нет в DataTable. Я попытался получить IEnumberable DataRow и присоединиться к этому списку, но я не могу определить недостающие.Найдите отсутствующие идентификаторы из списка <int> в DataTable

Вот мой код, и что я пытался ...

List<int> JobIdList = (from i in EntryItems select i.JobID.Value).ToList<int>(); 
IEnumerable<DataRow> rowInfo = JobBLL.JobsExist(JobIdList).AsEnumerable(); 

var MissingList = (from rec in rowInfo 
        join id in JobIdList 
        on rec.Field<int>("JobID") equals id 
        into grouping 
        from id in grouping.DefaultIfEmpty() 
        select new { id }).ToList(); 

if (MissingList.Count > 0) { // Show message and exit } 

Проблема заключается в том, что это возвращает элементы в таблице данных, которые найдены. Предположим, что у меня есть 1, 2 и 3 в моем списке, но в моей таблице данных только 1 и 3. Я хочу иметь 2 в MissingList.

Любые мысли?

ответ

2
var jobIdList = new HashSet<int>(from i in EntryItems select i.JobID.Value); 
var rows = JobBLL.JobsExist(jobIdList).AsEnumerable(); 

var foundIds = (from x in rows select x.Field<int>("JobID")).ToList(); 
var missingIds = jobIdList.Except(foundIds); 
+0

Хешсет является чуть более результативным, чем List для метода Except. – Aron

+0

Спасибо! Незначительное исправление, но 'from x row in rows' должно быть просто' from x in rows'. Отлично работает! –

+0

@ RyanBrooks исправлено – Aron

0

Вам необходимо добавить приведенную ниже строку кода в свой код.

var missingIds = JobIdList.Except(MissingList); 
Смежные вопросы