【发布时间】:2020-11-03 04:00:57
【问题描述】:
我有以下课程:
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();
【问题讨论】:
-
你不知道编译时属性的名称吗?这是为什么?无论如何,客户评估应该按照消息的建议进行(例如,
userContext.Users.ToList().Where(...))。 -
第一个
active不是属性...它是一个字段。GetProperty找不到。第二...为什么u和t是同一类型时需要反射。 -
@LegacyCode - 嗯,它是一个自动属性。
-
@MineKrafter 这不是我回复它的时候。 janzen 将其更改为自动属性。
标签: c# entity-framework linq asp.net-core