如何简化我的查询并使用其他命令?我依次转到三个表。似乎很难。我寻求帮助。
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>";
}
}
}
答案 0 :(得分:1)
LinqPad中的Linq联接解决方案。我使用Northwind数据库并连接4个表:Customers
,Orders
,OrderDetails
和Products
。我使用的是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中的结果
从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
连接字符串。