最近在做数据迁移的时候有遇到做导航对应时,需要动态拼接OR查询条件的情况,因为平常也比较少用到Lambda表达式查询数据,花费了不少的时间,现将解决方案记录如下:
if (!strCls.IsNullOrEmptyOrWhiteSpace())
{
var cls = strCls.Split(',');
//机关函数应用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混应时写在AND后的OR有效
//机关函数应用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混应时写在OR后面的AND有效
Expression<Func<T_PA_ACHIEVE_MAJOR_NAVI, bool>> filterExp = a => false;//一开始在这里采坑了,需要注意一下
for (int i = 0; i < cls.Length; i++)
{
//因为Linq 的查询实际上是在.ToList()的时候才正式查询,因而先用参数接收数据值,后面的查询才不会报数组下标越界
string clsdata = cls[i];
filterExp = filterExp.Or<T_PA_ACHIEVE_MAJOR_NAVI>(a => a.CODE == clsdata);
}
var temp = lstDH.ToList().Where(filterExp.Compile()).ToList();
if (temp != null)
{
foreach (var data in temp)
{
result = result + data.CODE + ";";
}
}
}