我有以下课程:
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
的{{1}}集合有InventoryItem
的集合。
如何获得SiteInventoryItem
的{{1}}列表,其Seller
列表中包含InventoryItems
和SiteInventoryItems
?
SiteType == SiteType.SiteName
是Seller.SellerId == 14
,数据库类型是SiteType
。
我尝试了以下内容并编译并运行,但结果并非预期:
Enum
答案 0 :(得分:1)
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();
我重新调整了结果类型,因为我觉得这样更有意义。现在您看到结果只返回Seller
个InventoryItems
SiteInventoryItems
。
请注意,我还删除了repo.Query()
的参数。我假设它们充当Include
s。但我也希望repo.Query()
返回IQueryable
,以便将Where
子句转换为生成的SQL。如果是这样,Include
是没用的,因为你已经查询了包含的实体,因为它们是匿名类型的一部分。