meta_key
-предикаты в JOIN
с Я позволил себе отформатировать ваш запрос для ясности.
Я переименовал псевдонимы и переместил meta_key
-предикаты из WHERE
в JOIN
с:
SELECT
(SELECT meta_value
FROM `myprefix_postmeta` as postmeta
WHERE
postmeta.meta_key = '_sku'
AND postmeta.post_id = IM3.meta_value ) AS sku,
I.order_item_name AS title,
SUM (IM.meta_value ) AS quantity,
SUM (IM2.meta_value ) AS total
FROM
`myprefix_woocommerce_order_items` AS I
LEFT JOIN `myprefix_posts` AS posts
ON posts.ID = I.order_id
LEFT JOIN `myprefix_woocommerce_order_itemmeta` AS IM -- Make readable aliases
ON IM.order_item_id = I.order_item_id
AND IM.meta_key = '_qty' -- Move predicates from WHERE
LEFT JOIN `myprefix_woocommerce_order_itemmeta` AS IM2
ON IM2.order_item_id = I.order_item_id
AND IM2.meta_key = '_line_total' -- Move predicates from WHERE
LEFT JOIN `myprefix_woocommerce_order_itemmeta` AS IM3
ON IM3.order_item_id = I.order_item_id
AND IM3.meta_key = '_product_id' -- Move predicates from WHERE
WHERE
posts.post_type = 'shop_order'
AND posts.post_status IN
( 'wc-completed', 'wc-processing', 'wc-on-hold' )
GROUP BY
IM3.meta_value
ORDER BY
total DESC
Теперь у нас есть абсолютно эквивалентный запрос.
Давайте посмотрим, что мы можем сделать дальше.
LEFT JOIN
с myprefix_woocommerce_order_itemmeta
с тем же предикатом IM.order_item_id = I.order_item_id
выглядит ненужным дублированием meta_key
Таким образом, мы можем:
a. Замените 3 СОЕДИНЕНИЯ только одним СОЕДИНЕНИЕМ
b. Замените поля IM / IM2 / IM3 CASE-выражениями
SELECT
(SELECT meta_value
FROM `myprefix_postmeta` as postmeta
WHERE
postmeta.meta_key = '_sku'
AND postmeta.post_id = ( -- Substitute meta_value with CASE-expressions
CASE
WHEN IM.meta_key = '_product_id' THEN IM.meta_value
ELSE NULL
END
) -- IM3.meta_value
) AS sku,
I.order_item_name AS title,
SUM (
CASE -- Substitute meta_value with CASE-expressions
WHEN IM.meta_key = '_qty' THEN IM.meta_value
ELSE 0
END
) AS quantity
-- IM2.meta_value ) AS total
SUM ( -- Substitute meta_value with CASE-expressions
CASE
WHEN IM.meta_key = '_line_total' THEN IM.meta_value
ELSE 0
END
) AS total
FROM
`myprefix_woocommerce_order_items` AS I
LEFT JOIN `myprefix_posts` AS posts
ON posts.ID = I.order_id
LEFT JOIN `myprefix_woocommerce_order_itemmeta` AS IM -- Make readable aliases
ON IM.order_item_id = I.order_item_id
AND IM.meta_key IN ('_qty', '_line_total', '_product_id')
-- AND IM.meta_key = '_qty' -- Move predicates from WHERE
-- LEFT JOIN `myprefix_woocommerce_order_itemmeta` AS IM2
-- ON IM2.order_item_id = I.order_item_id
-- AND IM2.meta_key = '_line_total' -- Move predicates from WHERE
-- LEFT JOIN `myprefix_woocommerce_order_itemmeta` AS IM3
-- ON IM3.order_item_id = I.order_item_id
-- AND IM3.meta_key = '_product_id' -- Move predicates from WHERE
WHERE
posts.post_type = 'shop_order'
AND posts.post_status IN
( 'wc-completed', 'wc-processing', 'wc-on-hold' )
GROUP BY
(
CASE
WHEN IM.meta_key = '_product_id' THEN IM.meta_value
ELSE NULL
END
) -- IM3.meta_value
ORDER BY
total DESC
Не очень удобно писать SQL без данных.
И возможно, что этот запрос некорректен для каждой версии mysql.
Поэтому постарайтесь понять принципы, а не просто скопировать и вставить мой код.
Сообщите нам о результатах или проблемах.
Необходимо добавить.Include метод к запросу.
var _db = new MyDBEntities();
var product = (from p in _db.Product.Include("Company")
where p.ProductID == 3
select p).First();
Deeploading поддерживается платформой Объекта, но ленивая загрузка не (ленивая загрузка будет поддерживаться в платформе Объекта 2.0).
С Загрузкой () или.Include ("Компания") как предыдущие сообщения говорят, что это будет работать.
Вот walkthough, как можно сделать платформу объекта ленивой: http://blogs.msdn.com/jkowalski/archive/2008/05/12/transparent-lazy-loading-for-entity-framework-part-1.aspx
Можно использовать, Включают, как предложено выше.
Кроме того, попытайтесь звонить
продукт. Компания. Загрузка () для получения объекта.
Использование Платформы Объекта задержало загрузку для предотвращения ненужных запросов, пока объект на самом деле не требуется..
Существует еще некоторая информация о задержанной загрузке здесь: http://www.code-magazine.com/article.aspx?quickid=0711051&page=4