[C#]LINQ 到实体检索相关实体或 T-SQL

标签: Linq SQLServer C#
发布时间: 2017/2/27 2:39:18
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这些 (简化) 的模型︰

class Vendor
{
    public int Id { get; set; }
    public IEnumerable<Product> Products { get; set; }
    public IEnumerable<Booth> Booths { get; set; }
}

class Show
{
    public int Id { get; set; }
    public IEnumerable<Booth> Booths { get; set; }
}

class Booth
{
    public int VendorId { get; set; }
    public Vendor Vendor { get; set; }

    public int ShowId { get; set; }
    public Show Show { get; set; }
}

class Product
{
    public int Id { get; set; }
    public int VendorId { get; set; }
    public IEnumerable<ProductPic> Pics { get; set; }
}

class ProductPic
{
    public int Id { get; set; }
    public int ProductId { get; set; }
    public string Uri { get; set; }
}

不在乎我使用 LINQ 或

IEnumerable<Vendor> vendorsWithProductsAndPicsInShow = db_.Vendors.SqlQuery(sql).AsEnumerable();

我只是想要将列表中的供应商,其产品和 productPics 在某一场演出的结果。

我试图通过查询摊位,有点像做呢

Vendor[] vendorsInShow = (from b in db_.Booths
                        .Include(m => m.Vendor)
                        .Include(m => m.Vendor.Products)
                        .Where(m => m.ShowId == showId && m.Vendor.Products.Count > 0)
                            select b.Vendor).AsNoTracking().ToArray();

该查询不会包括产品,而且我仍然需要为每个产品检索 ProductPics。

我需要在这里做什么?

解决方法 1:

您可以尝试从供应商选择和 ShowId 使用 any ()。

Vendor[] vendorsInShow = (from v in db_.Vendor
      .Include("Products.Pics")
      .Where(m => m.Booths.Any(a => a.ShowID == showId) 
           && m.Products.Count > 0)
   select v).AsNoTracking().ToArray();
官方微信
官方QQ群
31647020