ame*_*els 6 c# linq entity-framework entity-framework-core
我的IQueryable看起来像这样:
IQueryable<TEntity> query = context.Set<TEntity>();
query = query.Include("Car").ThenInclude("Model");
Run Code Online (Sandbox Code Playgroud)
'IQueryable'不包含'ThenInclude'的定义,也没有扩展方法'ThenInclude'可以找到'IQueryable'类型的第一个参数(你是否缺少using指令或汇编引用?)
我需要所有参考资料:
using Content.Data.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)
为什么它不识别ThenInclude?
查询:
[Content.Data.Models.Article]).Where(x => (((x.BaseContentItem.SiteId == value(Content.Business.Managers.ArticleManager+<>c__DisplayClass8_0).id) AndAlso x.BaseContentItem.IsActive) AndAlso x.BaseContentItem.IsLive)).Include("BaseContentItem").Include("BaseContentItem.TopicTag").Include("MainImage")}
Run Code Online (Sandbox Code Playgroud)
包含.Include("BaseContentItem.TopicTag")零件后失败.
所以我只是通过通用存储库读到你失去了ThenInclude.我正在使用这个通用代表:
public class ReadOnlyRepository<TContext> : IReadOnlyRepository
where TContext : DbContext
{
protected readonly TContext context;
public ReadOnlyRepository(TContext context)
{
this.context = context;
}
private IQueryable<TEntity> GetQueryable<TEntity>(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = null,
int? skip = null,
int? take = null)
where TEntity : class, IEntity
{
includeProperties = includeProperties ?? string.Empty;
IQueryable<TEntity> query = context.Set<TEntity>();
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
query = orderBy(query);
}
if (skip.HasValue)
{
query = query.Skip(skip.Value);
}
if (take.HasValue)
{
query = query.Take(take.Value);
}
return query;
}
Run Code Online (Sandbox Code Playgroud)
Iva*_*oev 16
ThenInclude仅当您使用Include带有lambda表达式参数的重载时才可用:
query = query.Include(e => e.Car).ThenInclude(e => e.Model);
Run Code Online (Sandbox Code Playgroud)
当您使用Include带有字符串参数的重载时,不需要,ThenInclude因为您可以在传递的字符串中指定整个属性路径:
query = query.Include("Car.Model");
Run Code Online (Sandbox Code Playgroud)
您的问题可能是缺少对 Microsoft.EntityFrameworkCore.Relational 的引用?
这可以通过包管理器添加。
还要确保您使用的是来自 Microsoft.EntityFrameworkCore 命名空间的 .include 而不是另一个 .Include (它没有 .ThenInclude)