Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从实体框架核心查询多个时态表?_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 如何从实体框架核心查询多个时态表?

C# 如何从实体框架核心查询多个时态表?,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我的数据库中有多个时态表,我想编写一个查询,将这些表连接在一起,但也使用特定日期的数据 我创建了以下扩展方法来帮助获取截止日期的数据: public static IQueryable<T> AsOf<T>(this DbSet<T> dbSet, DateTime? asOfDateTime) where T : class { if (dbSet == null) throw new ArgumentNullException(nameof(dbS

我的数据库中有多个时态表,我想编写一个查询,将这些表连接在一起,但也使用特定日期的数据

我创建了以下扩展方法来帮助获取截止日期的数据:

public static IQueryable<T> AsOf<T>(this DbSet<T> dbSet, DateTime? asOfDateTime) where T : class
{
    if (dbSet == null) throw new ArgumentNullException(nameof(dbSet));
    return asOfDateTime.HasValue
        ? dbSet.FromSql($"SELECT * FROM dbo.[{typeof(T).Name}] FOR SYSTEM_TIME AS OF {{0}}", asOfDateTime)
        : dbSet;
}
但是,如果我尝试像这样将表连接在一起

from entity in context.Entities.AsOf(asOfDateTime)
select new Entity
{
    entity.Name,
    MyProperties = from myProperty in context.MyProperties.AsOf(asOfDateTime)
                 where myProperty.EntityId == entity.EntityId
                 select new MyProperty
                 {
                     ...
然后我开始得到一个错误,比如

“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable”类型的表达式 无法用于“Microsoft.EntityFrameworkCore.DbSet”类型的参数 方法'System.Linq.IQueryable
1[MyProperty]AsOf[MyProperty](Microsoft.EntityFrameworkCore.DbSet
1[MyProperty],System.Nullable'1[System.DateTime]) 参数名称:arg0


是否可以从实体框架核心查询多个时态表?语法是什么?

目前我无法很好地回答这个问题,但我猜它在将其转换为Sql查询时遇到了问题。您可能需要将子查询作为LinqToSql单独运行,然后将它们连接在一起。这将避免LinqToSql必须可翻译为标准Sql的限制。您很可能在这里遇到问题“where myProperty.EntityId==entity.EntityId”。请参阅此github问题线程以获取解释@adam0101,在哪里可以查询多个时态表?@Alvykun,不幸的是没有。我最终使用了存储过程。有一件事确实帮助了我,那就是我为每个表创建了sql函数,这些表封装了as-of逻辑,以便查询易于编写和遵循。@Alvykun,我今天碰巧遇到了这个问题,它可能会帮助您:
from entity in context.Entities.AsOf(asOfDateTime)
select new Entity
{
    entity.Name,
    MyProperties = from myProperty in context.MyProperties.AsOf(asOfDateTime)
                 where myProperty.EntityId == entity.EntityId
                 select new MyProperty
                 {
                     ...