我有以下类(class):
public class Seller : Entity
{
public int SellerId { get; set; }
public string Name { get; set; }
public ICollection<InventoryItem> InventoryItems { get; set; }
}
public class InventoryItem : Entity
{
public int InventoryId { get; set; }
public int SellerId { get; set; }
public string SellerSku { get; set; }
public ICollection<SiteInventoryItem> SiteInventoryItems { get; set; }
}
public class SiteInventoryItem : Entity
{
public int Id { get; set; }
public int InventoryId { get; set; }
public SiteType Site { get; set; }
}
因此,Seller
有一个 InventoryItem
集合,而后者又有一个 SiteInventoryItem
集合。
我如何获得一个包含 InventoryItems
列表的 Seller
,其中包含 SiteInventoryItems
列表,其中 SiteType == SiteType .SiteName
和 Seller.SellerId == 14
?
SiteType
是一个Enum
,数据库类型是int
。
我尝试了以下方法,它编译并运行了,但结果不是预期的:
var seller = repo.Query(
x => x.InventoryItems,
x => x.InventoryItems.Select(y => y.SiteInventoryItems)
).Select(x => new
{
Seller = x,
InventoryItems = x.InventoryItems,
SiteInventoryItems = x.InventoryItems.Select(y => new
{
InventoryItem = y,
SiteInventoryItems = y.SiteInventoryItems.Where(z => z.Site == SiteType.Amazon)
})
}).Where(x => x.Seller.SellerId == 14).First();
最佳答案
var seller = repo.Query()
.Select(x => new
{
Seller = x,
InventoryItems = x.InventoryItems.Select(y => new
{
InventoryItem = y,
SiteInventoryItems = y.SiteInventoryItems.Where(z => z.Site == SiteType.Amazon)
}).Where(y => y.SiteInventoryItems.Any())
}).Where(x => x.Seller.Id == 14).First();
我稍微调整了结果类型,因为我认为这样更有意义。现在您看到结果只返回具有 InventoryItems
和 SiteInventoryItems
的 Seller
。
请注意,我还删除了 repo.Query()
的参数。我假设它们用作 Include
。但我也希望 repo.Query()
返回一个 IQueryable
,这样 Where
子句就会被翻译成生成的 SQL。如果是这样,Include
就没有用了,因为您已经在查询包含的实体,因为它们是匿名类型的一部分。
关于c# - Entity Framework 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079315/