Как ускорить выполнение запроса, используя вещи, отличные от объединения в C #?

#c# #sql #union

#c# #sql #объединение

Вопрос:

У меня есть объект с именем Product, который имеет атрибут ProductItem и теги.

 public class Shop{
    public string Id {get; set;}
    public Product Products {get; set;}   
}

public class Product{
    public string Name {get; set;}
    public string Id {get; set;}
    public Tag Tags {get; set;}
    public ProductItem ProductItems {get; set;}
    public Shop ShopInformation {get; set;}
}

public class Tag{
    public string Id {get; set;}
    public string name {get; set;}
}

public class ProductItem{
    public string Id {get; set;}
    public Tag Tags {get; set;}
}
 

Я хотел бы получить все теги как в продуктах, так и в тегах из datacontext
, и я использую этот запрос

 var result = from shop in dataContext.Shop
             select new Response
             {
                 Id = shop.Id,
                 Tags = (from product in dataContext.Product
                 where product.ShopInformation.Id == shop.Id
                 from productTag in 
                 product.Tags.Union(product.ProductItems.SelectMany(s => s.Tags))
                 select productTag.Name).Distinct(),
             };
 

Однако производительность довольно низкая, и поэтому я хотел бы знать, есть ли способ быстрее собирать все теги.

Комментарии:

1. Как выглядит сгенерированный SQL-запрос? Вы взглянули на план выполнения?

2. Элементы productItems являются внутренними для продукта и объединяют все со всеми артикулами в продукте. Процесс повторяется для всех магазинов