Как упростить мой запрос и использовать дополнительные команды? - PullRequest
0 голосов
/ 25 сентября 2018

Как упростить мой запрос и использовать дополнительные команды?Я перехожу к трем столам по очереди.Это кажется сложным.Прошу помощи.

result = "<p>" + (++num) + ")" + node.Text + "</p>";
foreach (var itm in _dbContext.ERIPKEY.Where(k => k.PKeyName == node.Text).ToArray())
{
    foreach (var itmk in _dbContext.ERIKEY.Where(s => s.PKey == itm.PKey).ToArray())
    {
        foreach (var item in _dbContext.ERIPKEYMOUNTING.Where(t => t.MIndex == itmk.MIndex).ToArray())
        {
            result += "<p> - " + item.Note + "</p>";
        }
    }
}

1 Ответ

0 голосов
/ 25 сентября 2018

Linq решение для соединения в LinqPad.Я использую базу данных Northwind и объединяю 4 таблицы: Customers, Orders, OrderDetails и Products.Я использую SQL Server Express, поэтому я предполагаю, что у вас есть подходящий драйвер Linq для PostgreSQL.

var _dbContext = new UserQuery(Connection); // LinqPad only, change to your dbcontext constructor
var query =
    from customer in _dbContext.Customers
    join order in _dbContext.Orders on customer.CustomerID equals order.CustomerID
    join orderDetail in _dbContext.OrderDetails on order.OrderID equals orderDetail.OrderID
    join product in _dbContext.Products on orderDetail.ProductID equals product.ProductID
    where customer.ContactName == "Peter Franken"
    select new
    {
        CustomerName = customer.ContactName,
        OrderDate = order.OrderDate,
        ProductName = product.ProductName,
        Subtotal = orderDetail.UnitPrice * orderDetail.Quantity
    };

foreach(var q in query)
    Console.WriteLine("{0} {1} {2} {3}", q.CustomerName, q.OrderDate, q.ProductName, q.Subtotal);

Результат в LinqPad

enter image description here

Сгенерированная команда SQL из этого запроса в LinqPad:

-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'Peter Franken'
-- EndRegion
SELECT [t0].[ContactName] AS [CustomerName], [t1].[OrderDate], [t3].[ProductName], [t2].[UnitPrice] * (CONVERT(Decimal(29,4),[t2].[Quantity])) AS [Subtotal]
FROM [Customers] AS [t0]
INNER JOIN [Orders] AS [t1] ON [t0].[CustomerID] = [t1].[CustomerID]
INNER JOIN [Order Details] AS [t2] ON [t1].[OrderID] = [t2].[OrderID]
INNER JOIN [Products] AS [t3] ON [t2].[ProductID] = [t3].[ProductID]
WHERE [t0].[ContactName] = @p0

Наконец, вы можете использовать StringBuilder для объединения строк, если результат запроса большой.

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