Как вернуть подзапрос в LINQ / EF - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующий метод, который возвращает подзапрос SQL.С возвратом метода я разрабатываю основной запрос.

Но теперь мне нужно сделать это, используя запрос LINQ.

Как я могу это сделать?

Public void AvailableStock()
{
        string query = "Select prod.ID, prod.Name, ";
        query += AvailableStockQuery("prod.ID") + " as AvailableStock ";
        query += " From TAB_Products prod ";
}
Public string AvailableStockQuery(string ProductAlias = "prod.ID")
{
        string query = "((Select Sum(est.Quantity) " +
                       "  From ProductStock est " +
                       "  Where est.ProductID = " + ProductAlias +
                       " ) " +
                       " - (Select Sum(it.Quantity) " +
                          " From OrderItens it " +
                          " Where it.ProductID = " + ProductAlias + 
                          ")" +
                       ") ";

        return query;
}

1 Ответ

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

Но вам даже не нужен подзапрос.Вы можете просто присоединить таблицы ProductStock и OrderItens к таблице TAB_Products и сгруппировать их по prod.ID, и тогда подзапросы вообще не нужны.Вероятно, производительность тоже лучше.И это легче перевести на EF, потому что нет подзапросов.

Примерно так:

SELECT prod.ID, FIRST(prod.Name), (SUM(est.Quantity) - Sum(it.Quantity)) AS AvailableStock 
From TAB_Products prod 
LEFT JOIN ProductStock est ON est.ProductID = prod.ID
LEFT JOIN OrderItens it ON it.ProductID = prod.ID
GROUP BY prod.ID

Но, если вы хотите, вы также можете создавать подзапросы, вот пример: https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-a-subquery-on-a-grouping-operation

...