2013-04-19 56 views
1

我有一個列表和一個DataTable,它包含一個與列表中的ID相匹配的列。我需要識別列表中不在DataTable中的所有ID。我嘗試了一個IEnumberable DataRow並將它加入到列表中,但我無法找到丟失的列表。在DataTable中查找缺少ID的列表<int>

這裏是我的代碼和我已經試過......

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.我想在MissingList中有2個。

有什麼想法?

回答

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

謝謝!小修正,但'從行中的X行'應該是'從行中的X'。雖然工作很棒! –

+0

@RyanBrooks修復 – Aron

0

您需要將以下代碼行添加到代碼中。

var missingIds = JobIdList.Except(MissingList);