方法A:
public IQueryable<User> GetByEmail(string email) { return _users.Where(u => u.Email == email); }
方法B:
public IQueryable<User> GetByLoginName(string loginName) { return _users.Where(u => u.LoginName == loginName); }
需要通过调用这2个方法,实现这样的效果:
return _users.Where(u => u.Email == email).Where(u => u.LoginName == loginName);
解决这个问题的难点在于如何从 IQueryable 的 Expression 中提取出 Expression<Func<T, bool>>
对于 Where 查询,IQueryable.Expression 的类型是 MethodCallExpression
IQueryable有个Expression的property的属性。
http://stackoverflow.com/questions/457316/combining-two-expressions-expressionfunct-bool
写个IQueryable的拓展方法。两个方法合成一个.
public static IQueryable<TSource> HasWhere<TSource>(this IQueryable<TSource> query, string target, Expression<Func<TSource, bool>> predicate) { if (!String.IsNullOrEmpty(target)) { return query.Where(predicate); } return query; }
将两个Iqueryable通过linq语句Join查询呢