如何简化我的查询并使用其他命令?

时间:2018-09-24 21:46:35

标签: c# postgresql

如何简化我的查询并使用其他命令?我依次转到三个表。似乎很难。我寻求帮助。

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 :(得分:1)

LinqPad中的Linq联接解决方案。我使用Northwind数据库并连接4个表:CustomersOrdersOrderDetailsProducts。我使用的是SQL Server Express,因此我假设您具有适用于PostgreSQL的Linq驱动程序。

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

从LinqPad中的查询生成的SQL命令:

-- 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连接字符串。