我有这样的代码:
User rValue = null;
var userByID = new Func<User, bool>(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase));
if (this._context.Users.Any(userByID))
{
var user = this._context.Users
.Include("nested.Associations")
.Single(userByID);
rValue = user;
}
return rValue;
我开始分析查询,并注意到 EF 没有将 Func<> 应用于 SQL 查询,而是在返回整个 .Users 集后应用于内存中的集合。
有趣的是,下面会生成带有过滤 UserID 的正确 where 子句的查询:
User rValue = null;
//var userByID = new Func<User, bool>(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase));
if (this._context.Users.Any(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase)))
{
var user = this._context.Users
.Include("nested.Associations")
.Single(x => x.UserId.Equals(userID, StringComparison.InvariantCultureIgnoreCase));
rValue = user;
}
return rValue;
- 为什么 EF 不会将谓词 var 构建到生成的 SQL 中?
- 是否有另一种方法可以重用谓词,以便我的代码可以保持干净和可读,并将 EF 填充到生成的 SQL 中?