Мне нравится составлять запросы Linq, записывая отдельные компоненты запроса в виде отдельных операторов.Поскольку каждый оператор является запросом, а не результатом, Linq затем объединит их все в один запрос SQL во время выполнения.
Написание запроса таким образом, для меня, делает его очень простым для чтения, без ущерба для производительности базы данных во время выполнения, поскольку Linq в любом случае превращает его в один большой запрос во время выполнения.Он преобразует Содержимое в запросах ниже в подвыборы.
Используйте LinqPad, чтобы увидеть сгенерированный SQL - может быть очень интересно увидеть, как SQL создает Linq.запрос.Чтобы это реализовать, выполните result.ToList ();
var productIds = from p in product
join m in manufacturer on p.manufacturer_id equals m.manufacturer_id
where m.name == 'manufacturer name'
select p.product_id;
var productAttributeIds = from pa in product_attribute
where productIds.Contains(pa.product_id)
select pa.product_attribute_id;
var attributeValueIds = from pav in product_attribute_value
where productAttributeIds.Contains(pav.product_attribute_id)
select pav.attribute_value_id;
result = from av in attribute_value
where attributeValueIds.Contains(av.atttriute_value_id)
select av;