C# 如何简化“我的查询”并使用其他命令?
如何简化“我的查询”并使用其他命令?我依次看三张桌子。这似乎很难。我请求帮助C# 如何简化“我的查询”并使用其他命令?,c#,postgresql,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 =>
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>";
}
}
}
result=“”+(++num)+“+node.Text+””;
foreach(在_dbContext.ERIPKEY.Where(k=>k.PKeyName==node.Text.ToArray()中使用var itm)
{
foreach(在_dbContext.ERIKEY.Where(s=>s.PKey==itm.PKey.ToArray()中的变量itmk)
{
foreach(_dbContext.ERIPKEYMOUNTING.Where(t=>t.MIndex==itmk.MIndex.ToArray()中的var项)
{
结果+=“-”+项。注+“”;
}
}
}
LinqPad中的Linq连接解决方案。我使用Northwind数据库并加入4个表:客户
、订单
、订单详细信息
和产品
。我使用的是SQLServerExpress,所以我假设您有适合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
来连接字符串。FYI可以消除所有ToArray()
调用。foreach
循环在实现IEnumerable
的东西上运行,因此您可以排除物化逻辑(例如ToArray()
调用),只需迭代Where()
的结果,使用Linq join而不是嵌套循环。我的代码可以工作,但我正在学习,我想纠正我的错误。在我看来,我写得不好。我想看看如何在Linqa上重写它的最佳选项您是否尝试使用字符串连接创建HTML?通过使用来避免自己几天的挫折。