c# - LINQ - 按属性名称选择
问题描述
我有以下课程:
public class User
{
public string userName { get; set; }
public bool active { get; set; }
}
样本:
{
userName: John,
active: true
},
{
userName: Mary,
active: true
}
如何按属性名称查询“活跃”用户?这是我尝试过的,但我得到:
“无法翻译 LINQ 表达式……要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync 的调用显式切换到客户端评估()"
Type t = typeof(User);
PropertyInfo p = t.GetProperty("active");
int totalActive = userContext.Users.Where(u => Convert.ToBoolean(p.GetValue(u)) == true).Count();
解决方案
如果由于某种原因您需要动态执行此操作,则需要手动构建表达式树(检查Queryable.Where
签名):
public class User
{
public string userName {get;set;}
public bool active {get;set;}
}
Type t = typeof(User);
PropertyInfo p = t.GetProperty("active");
var prmtr = Expression.Parameter(t);
var value = Expression.Constant(true);
var comprasion = Expression.Equal(Expression.Property(prmtr, p), value);
var expr = Expression.Lambda<Func<User, bool>>(comprasion, prmtr);
int totalActive = userContext.Users.Where(expr).Count();
推荐阅读
- mapbox - 在 Mapbox 中显示自定义数据
- javascript - MongoDB 创建无效的 _id 属性
- lightfm - 在 LightFM 中“衡量”项目/用户功能重要性的好方法是什么?
- php - 如何从表中选择数据并打印
- jquery - 如果下拉列表中所选选项的类等于一个值,则在页面加载时将类添加到 div
- automation - Datadog Terraform (IaC) - 多个组织的目录布局策略
- kubernetes - Minikube 挂在创建 hyperv 虚拟机上
- python - 由于库,Python 代码无法在 IDE 之外工作
- java - 无法解析符号 activity_sign_up
- javascript - 强制停止函数执行