我的数据库中有多个时态表,我想编写一个将这些表连接在一起的查询,但是也会在某个日期使用 的数据。
我创建了以下扩展方法来帮助获取日期数据:
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
...
但是,如果我尝试将这些表连接在一起......
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
{
...
然后我开始收到错误,例如
Expression of type 'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable
1[MyProperty]'
cannot be used for parameter of type 'Microsoft.EntityFrameworkCore.DbSet
1[MyProperty]'
of method 'System.Linq.IQueryable1[MyProperty] AsOf[MyProperty](Microsoft.EntityFrameworkCore.DbSet
1[MyProperty], System.Nullable`1[System.DateTime])'
Parameter name: arg0
是否可以从Entity Framework Core查询多个时态表?语法是什么?