实体框架选择查询

时间:2015-08-18 17:49:21

标签: c# entity-framework

我有以下课程:

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列表中包含InventoryItemsSiteInventoryItems

SiteType == SiteType.SiteNameSeller.SellerId == 14,数据库类型是SiteType

我尝试了以下内容并编译并运行,但结果并非预期:

Enum

1 个答案:

答案 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();

我重新调整了结果类型,因为我觉得这样更有意义。现在您看到结果只返回SellerInventoryItems SiteInventoryItems

请注意,我还删除了repo.Query()的参数。我假设它们充当Include s。但我也希望repo.Query()返回IQueryable,以便将Where子句转换为生成的SQL。如果是这样,Include是没用的,因为你已经查询了包含的实体,因为它们是匿名类型的一部分。