这是我的代码:
List<long> LevelsArray = CardServiceDetailsDt.AsEnumerable()
.Select(r => r.Field<long("LEVEL_ID"))
.ToList<long>();
DataTable leveldt =ClientsDataHelper.GetServicePackagesLevel(new WebSiteDataHelper()
.SelectedStoreID.Value);
如何选择列表中没有的LEVEL_ID
?
答案 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>();