c# - LINQ to Entities 无法识别该方法(在相关实体上)

标签 c# entity-framework linq linq-to-entities entity-framework-6

我正在努力使一些代码更具可读性,但我不太了解如何构造扩展方法和/或表达式来实现它。我们目前有许多实体拥有 RecordStatusTypeId在它们上(从 IRecordStatus 的接口(interface)实现)

public interface IRecordStatus
{
    int RecordStatusTypeId { get; set; }
    RecordStatusType RecordStatusType { get; set; }
}

这里的目标是替换像 .Where(RecordStatusTypeId != (int)RecordStatusTypes.Deleted) 这样的语句使用类似 .ActiveRecords() 的扩展方法

我可以使用以下扩展方法完成此操作:

public static IQueryable<T> ActiveRecords<T>(this DbSet<T> entitySet)
    where T : class, IRecordStatus
{
    return entitySet.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted);
}

*我有 DbSet<T> 的扩展方法, IQueryable<T> , ICollection<T> , 和 IEnumerable<T>

这对于 MyDbContext.Entities.Where(e => e.RecordStatusTypeId != (int)RecordStatusTypes.Deleted) 这样的语句非常有用,但如果我尝试替换类似以下内容,我会收到错误“LINQ to Entities 无法识别该方法”:

MyDbContext.Entities.Where(e => e.RelatedEntity.Where(re => re.RecordStatusTypeId != (int)RecordStatusTypes.Deleted));

我想做的事:

MyDbContext.Entities.Where(e => e.RelatedEntity.ActiveRecords().Any());

如何更改我的扩展方法(或添加表达式)以便我可以在 DbSet 上筛选事件记录以及 linq 子句中的相关实体?

最佳答案

看来您的转换可能有误。 应该:

MyDbContext.Entities.Where(e => e.RelatedEntity.Where(re => re.RecordStatusTypeId != (int)RecordStatusTypes.Deleted));

转换为:

MyDbContext.Entities.Where(e => e.RelatedEntity.ActiveRecords().Any());

关于c# - LINQ to Entities 无法识别该方法(在相关实体上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37440348/

相关文章:

c# - 无法创建类型为 'Anonymous type' 的常量值

c# - 将一个对象放在 ILGenerator 中的堆栈顶部

c# - 有什么方法可以将多个嵌套创建 foreach 循环展平为批量创建/插入吗?

c# - LINQ 中的条件谓词?

c# - 在 Linq 查询中动态选择属性

c# - 为什么所有对象都在智能感知中列出 Rhino stub 方法?

c# - 如何在 .net 中导入 axaltocm dll [gemalto .net 卡]

entity-framework - Entity Framework 核心 : “Invalid attempt to call ReadAsync when reader is closed”

c# - LINQ 中的 order by 问题

sql - 在LINQ To SQL中使用 “Is NULL/not NULL”