您的位置:首页 > 其它

linq实现动态查询和模糊查询

2008-12-01 18:09 239 查看
public ActionResult MemberList(int? page, int? pageSize, string LoginId, string IsConfirm,string IsLockedOut)

{

Expression<Func<Members, bool>> expr = n => GetCondition(n,LoginId,IsConfirm,IsLockedOut);

var Query = db.Members.Where(expr.Compile()).OrderByDescending(e => e.CreateDate);

int pIndex = page ?? 1;

int pSize = pageSize ?? 10;

var gridViewData = new GridViewData<Members>

{

PagedList = Query.ToList().ToPagedList(pIndex, pSize)

};

ViewData["MemberList"] = gridViewData.PagedList;

return View(gridViewData);

}

private static bool GetCondition(Members tb, string LoginId, string IsConfirm, string IsLockedOut)

{

bool boolResult = true;

if (!string.IsNullOrEmpty(LoginId))

{

boolResult &= tb.LoginId==LoginId.Trim();

}

if (!string.IsNullOrEmpty(IsConfirm) && Regex.IsMatch(IsConfirm.Trim(), @"^(-?[0-9]*[.]*[0-9]{0,3})$"))

{

boolResult &= tb.IsConfirm == Convert.ToBoolean(Convert.ToInt32(IsConfirm.Trim()));

}

if (!string.IsNullOrEmpty(IsLockedOut)&& Regex.IsMatch(IsLockedOut.Trim(), @"^(-?[0-9]*[.]*[0-9]{0,3})$"))

{

boolResult &= tb.IsLockedOut == Convert.ToBoolean(Convert.ToInt32(IsLockedOut.Trim()));

}

boolResult &= tb.IsDelete == false;

return boolResult;

}

但是在查询中需要使用模糊查询,但是用戶端不支持 SqlMethods.Like().并且 SqlMethods.Like()只是转成SQL语句,因此如果要對登录账户进行模糊查詢的的話就不能使用 SqlMethods.Like()。既然不能使用那么我们该怎么办呢?接著往下看
解決辦法。我們 可以根据.NET對字符串的处理來实现。
tb.LoginId.IndexOf(LoginId.Trim())>=0; //等同于like '%LoginId%' tb.LoginId.StartsWith(LoginId.Trim())>=0; // 等同于like 'LoginId%'
tb.LoginId.EndWith(LoginId.Trim())>=0; // 等同于like '%LoginId '
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: