gpt4 book ai didi

Linq toEntity - 在 EntityCollection 导航属性中搜索

转载 作者:行者123 更新时间:2023-12-02 11:48:28 28 4
gpt4 key购买 nike

我们有课

public Invoice: EntityObject
{
public EntityCollection<InvoicePosition> Positions { get {...}; set{...}; }
...
}

public InvoicePosition: EntityObject
{
public string GroupName { get {...}; set{...}; }
}

我们得到IQueryable<Invoice> ,我们没有得到 IQueryable<InvoicePosition> 。我应该如何查找具有组名称为“Fuel”的仓位的发票?

IQueryable<Invoice> invoices = InvoiceRepository.List();
IQueryable<Invoice> invoicesThatHaveFuelPositions =
from i in invoices
where ?
select i

EntityFramework 应该能够将其转换为正确的 SQL 查询。

编辑

正如 Mark Seemann 所写,我可以使用:

IQueryable<Invoice> invoices = InvoiceRepository.List().Include("Positions").Include("OtherInclude");
IQueryable<Invoice> invoicesThatHaveFuelPositions =
from i in invoices
from p in i.Positions
where p.GroupName = 'Fuel'
select i;

有问题。当我使用此过滤时,我丢失了“OtherIninclude”。我认为这不是使用 EF 时正确的过滤方式。我必须将其更改为:

IQueryable<Invoice> invoices = InvoiceRepository.List().Include("Positions").Include("OtherInclude");
IQueryable<Invoice> invoicesThatHaveFuelPositions = invoices.Where(???);

但是我应该在Where中写什么?

编辑

将 Include("Position") 更改为 Include("Positions")。

编辑

Alex James 给出了提示 ( http://blogs.msdn.com/alexj/archive/2009/06/02/tip-22-how-to-make-include-really-include.aspx ) 的链接,其中建议:

IQueryable<Invoice> invoicesThatHaveFuelPositions = 
from i in invoices
where i.Positions.Any(p => p.GroupName == 'Fuel')
select i;

它似乎有效并且不影响 EF 包含。

最佳答案

以 Marks 答案为基础。如果您这样做:

var q = from i in invoices.Include("something")
from p in i.Positions
where p.GroupName == "Fuel"
select i;

包含会丢失(请参阅 this tip ),因为如果查询的形状发生变化,EF 将丢失所有包含,例如,如果您像在 SelectMany 查询(又名 from from)中那样执行隐式联接。

解决方法是编写查询,然后在最后应用“包含”。

类似这样的事情:

var q = ((from i in invoices
from p in i.Positions
where p.GroupName == "Fuel"
select i) as ObjectQuery<Invoice>).Include("something");

如果您这样做, Entity Framework 实际上会执行包含操作。

希望这有帮助

亚历克斯

关于Linq toEntity - 在 EntityCollection 导航属性中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695975/

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