Используйте универсальную функцию включения в ASP.NET Core - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть это общее включение в ASP.NET Core:

 public IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
 {
     IQueryable<T> query = _uow.Set<T>();

     return includeProperties.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
 }

У меня есть две таблицы:

public class Brand
{
    public int BrandId { get; set; }
    public string BFaName { get; set; }
    public string BEnName { get; set; }
    public int CatId { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
    public virtual ICollection<ProductBrand> ProductBrands { get; set; }
}

public class ProductBrand
{
    public int Id { get; set; }
    public virtual Brand Brand { get; set; }
    public virtual Product Product { get; set; }
}

Мне нужно найти BrandId из Brand таблицыProductID in Product.

Как я могу использовать это универсальное включение, чтобы найти BrandID?Что я должен передать этому универсальному включению?

1 Ответ

0 голосов
/ 04 февраля 2019

Я предполагаю, что функция включения работает как положено.Тогда

int brandId = 12;

var product = AllIncluding(a => a.Product).Single(a => a.Id == brandId);

// your result here
var brand = product.Brand;

или 'oneliner'

var brand = AllIncluding(a => a.Product)
     .Single(a => a.Id == 12)
     .Select(a => a.Brand);

Обратите внимание, что Single небезопасно!

Если вам нужно большевключая:

var brand = AllIncluding(a => a.Product, a => a.Brand, ...)
...

Поскольку вы используете ключевое слово params, вы можете одновременно передавать несколько операторов включения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...