gpt4 book ai didi

c# - Entity Framework 包含条件

转载 作者:行者123 更新时间:2023-11-30 20:48:58 25 4
gpt4 key购买 nike

我有两个相关的实体,ActiveContractBudgetSource。我正在尝试获取所有标记为 isActive = true 的 BudgetSource,以及所有相关的 ActiveContracts 也标记为 isActive = true .我累了:

var d = budgetSourceRep.All.Where(x => x.isAcitve)
.OrderBy(x => x.SourceName)
.Include(z => z.ActiveContracts.Where(q => q.isActive))
.Select(y => new EditSelectItemViewModel
{
Id = y.Id,
SourceName = y.SourceName,
DisplayOnNew = y.DisplayOnNew,
NumberOfTimesUsed = y.ActiveContracts.Count()
}).ToList();

但这给了我一个错误

The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties. Parameter name: path

然后我将其更改为将过滤器放在投影中:

var d = budgetSourceRep.All.Where(x => x.isAcitve)
.OrderBy(x => x.SourceName)
.Include(z => z.ActiveContracts)
.Select(y => new EditSelectItemViewModel
{
Id = y.Id,
SourceName = y.SourceName,
DisplayOnNew = y.DisplayOnNew,
NumberOfTimesUsed = y.ActiveContracts.Count(a => a.isActive)
}).ToList();

这行得通,但我假设它会进行第二个查询来做到这一点?如果是这样,有没有办法一次性完成。

最佳答案

that works, but i'm assuming it's going to make a second query to do that?

不,不是。您可以通过查看为此查询生成的 SQL 来亲眼看到。

查询提供程序成功将您的第一个查询转换为 SQL 在理论上是可行的,但这样做……很难。这根本不是 EF 开发人员选择放入其查询提供程序的功能。相反,您被迫以某种方式转换出一组相关实体来过滤它们,您不能使用 Include 为您完成这项工作。

关于c# - Entity Framework 包含条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com