c# - 模型类中的计算字段给出异常

标签 c# linq entity-framework

我在执行 Linq 查询时遇到异常:

The specified type member 'Active' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

模型类

public class User : Entity
{
     //Many properties skipped

     [NotMapped]
        public bool Active
        {
            get
            {
               return Orders.Any(c => 
                c.Active && (c.TransactionType == TransactionType.Order ||
                             c.TransactionType == TransactionType.Subscription));
            }
        }

}

给出异常的 Linq 查询

public IEnumerable<User> GetInactiveUsersForSuspensionNotification()
{
    return _userRepository.GetAll()
        .Include(i=>i.Orders)
        .Where(w => w.Active == false);
}

OrdersUsers 的相关表。

最佳答案

当使用 LINQ to Entities 时,LINQ 表达式被转换为 SQL 查询以发送到数据库。这样整个表就不会被拉入内存。

你的问题是,因为 Active 没有被映射,所以数据库对此一无所知,因此无法进行计算。

您需要将 Active 移动到您的数据库中或将 LINQ 语句更改为仅查询数据库中的列

关于c# - 模型类中的计算字段给出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294740/

相关文章:

c# - 首先通过将类型作为参数传递来动态实例化 Entity Framework 数据库中的模型对象

c# - 如何在 select 方法中使用实例名称为类实例成员赋值

asp.net-mvc - Entity Framework 6 - 如何将属性标记为非外键

c# - 在 foreach 循环中手动增加一个枚举数

c# - 正确处理任务取消的一般方法

c# - 业务对象应该包含对象还是引用?

c# 在 2/多个列表中查找一个项目

c# - Linq 在列表的每个项目中包含属性

c# - 使用 Entity Framework 从 SQL 数据库中获取除 SQL 之外的所有内容

asp.net - web.config 中与 targetFramework 相关的配置错误