public IEnumerable<AccountCategory> GetAllAccountsCategories(Guid applicationSubscriberId)
{
return _context.AccountCategories.Include(s => s.AccountSubCategories)
.ThenInclude(t => t.AccountTypes)
.ThenInclude(d =>d.ChartOfAccounts.Where(c => c.ApplicationSubscriberId == applicationSubscriberId));
}
这是我需要为我的项目生成的查询,但是会引发异常:
属性表达式“ d => {来自d.ChartOfAccounts中的ChartOfAccount c,其中([c] .ApplicationSubscriberId == __applicationSubscriberId_0)选择[c]}”无效。该表达式应表示属性访问:“ t => t.MyProperty”。有关包括相关数据的更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=746393
我已经尝试了所有可能的选项,但仍然无法使用。有人建议存储过程可以工作,但我不执行存储过程。
答案 0 :(得分:0)
根据您要过滤的内容确定答案:
我的猜测是,您希望所有具有与我提供的ID匹配的AccountType.ChartOfAccounts.Subscriber的Account类别。这将返回帐户类别,并急于加载所有帐户类型及其各自的会计科目表。
var accountCategories = _context.AccountCategories
.Include(ac => ac.AccountSubCategories)
.ThenInclude(sc => sc.AccountTypes)
.ThenInclude(at => at.ChartOfAccounts)
.Where(ac => ac.AccountSubCategories
.Any(sc => sc.AccountTypes
.Any(at => at.ChartOfAccounts
.Any(ac => ac.ApplicationSubscriberId == applicationSubscriberId));
查询深层嵌套的条件有点麻烦。
如果您想过滤返回的每个帐户类别的ChartOfAccounts,以仅包括具有该订户ID的图表,则EF无法过滤实体集,因此您必须分别在该过滤的集合上进行选择。根据需要进行多大程度的过滤(即包括/排除帐户类型和/或子类别)来控制查询的复杂性。本质上是要过滤子集合,您需要在顶级实体旁边明确选择它们。
如果上面的示例不能反映您的要求,那么请附加示例数据状态和所需的输出,我们将了解是否可能/如何实现。