项目中用到了对两个集合的帅选等操作,简单总结下
1.Linq操作多个Datable
可以通过AsEnumerable()方法对DataTable进行Linq操作
//获取数据表所有数据
DataTable allJDt = GetDbDataTable(m_DBFile, "select * from 监测点");
//所有插入的数据
DataTable jAddDt =
dt.AsEnumerable()
.Where(n => n.Field<string>("TableName") == "监测点")
.Where(m => m.Field<string>("Operation") == "Insert")
.AsEnumerable();
//根据主键帅选所有插入的数据
DataTable jcaddDt =
allJDt.AsEnumerable()
.Where(
x =>
jAddDt.AsEnumerable()
.Select(a => a.Field<string>("KeyFld"))
.Any(a => x.Field<string>("Name").Contains(a)));
//筛选表所有修改的数据(差集)
DataTable DjcModifyDt = allJDt.AsEnumerable().Except(jcaddDt.AsEnumerable());
2.Linq操作多个List
得到一组List主键,根据这个主键集合帅选出满足条件的数据集合。
//所有数据
List<sys_Right_Navigation> rlistList =GetAllList();
//跟据组GroupID条件获取所有的主键
List<int> gMist = rlistList .Where(n => n.GroupID == gID).Select(a => a.ModuleID).ToList();
//这组的所有模块id
if (gMist.Count() > 0)
{
//根据主键list帅选满足条件的集合
rlistList = rlistList .Where(x => gMist.Any(p => p == x.ModuleID)).ToList();
}