从DataTable列中选择不在列表中的值

时间:2013-12-03 11:46:10

标签: c# asp.net

这是我的代码:

List<long> LevelsArray = CardServiceDetailsDt.AsEnumerable()
                                 .Select(r => r.Field<long("LEVEL_ID"))
                                 .ToList<long>(); 

DataTable leveldt =ClientsDataHelper.GetServicePackagesLevel(new WebSiteDataHelper()
                                 .SelectedStoreID.Value);

如何选择列表中没有的LEVEL_ID

2 个答案:

答案 0 :(得分:1)

假设第二个表还有列LEVEL_ID

IEnumerable<DataRow> filteredRows = leveldt.AsEnumerable()
    .Where(r => !LevelsArray.Contains(r.Field<long>("LEVEL_ID")));

这是一个可能更有效的Linq Left-Outer-Join appproach

filteredRows  = from row in leveldt.AsEnumerable()
                join levelID in LevelsArray
                on row.Field<long>("LEVEL_ID") equals levelID into rowLevelID
                from subrow in rowLevelID.DefaultIfEmpty()
                where subrow == null
                select row;

如果您只需要列表中没有的ID,请使用Enumerable.Except

List<long> notInList = leveldt.AsEnumerable()
    .Select(r => r.Field<long>("LEVEL_ID"))
    .Except(LevelsArray)
    .ToList();

这是最有效的方法,因为它使用了一个集合。它只选择数据行中不在数组中的ID。

答案 1 :(得分:0)

List<long> LevelsArray = (from r in leveldt.AsEnumerable()
         let LEVEL_ID = r.Field<long>("LEVEL_ID")
         where !list.Contains(LEVEL_ID)
         select LEVEL_ID).ToList<long>();