c# - Entity Framework 选择查询

标签 c# entity-framework

我有以下类(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 .SiteNameSeller.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();

我稍微调整了结果类型,因为我认为这样更有意义。现在您看到结果只返回具有 InventoryItemsSiteInventoryItemsSeller

请注意,我还删除了 repo.Query() 的参数。我假设它们用作 Include。但我也希望 repo.Query() 返回一个 IQueryable,这样 Where 子句就会被翻译成生成的 SQL。如果是这样,Include 就没有用了,因为您已经在查询包含的实体,因为它们是匿名类型的一部分。

关于c# - Entity Framework 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079315/

相关文章:

c# - 连续流媒体网站上的 .NET HTTP 请求超时不是 "Aborting"

c# - 当枚举类型未知时返回默认枚举值

entity-framework - 多个项目的 ADO.NET 实体连接字符串

entity-framework - Entity Framework 多对多问题

entity-framework - EF 4.0 实体在插入后不拾取新值(插入后选择实体)

c# - 如何使用 WatiN 访问 iframe 中的控件?

c# - 简单注入(inject)器 : Register ILogger<T> by using ILoggerFactory. CreateLogger<T>()

c# - CheckboxList 忽略 DataValueField 和 DataTextField

entity-framework - 使用单独的文件来维护 Entity Framework 的连接字符串

c# - DbInitializer 失败,必须在根类型上配置 key