我目前正在將資料添加到 GridView。資料來自不同資料庫上的 2 個表。目前我能夠填充第一個條目,但它不會填充過去。這是代碼:
void FillOrder(int inv)
{
var _ord = new OrdersContext();
var _pro = new ProductContext();
var qryOrder = (from o in _ord.OrderDetails
where o.InvNumberId == inv
select new
{
o.ProductID,
o.Quantity
}).ToList();
foreach (var order in qryOrder)
{
int prodID = order.ProductID;
int itemCount = qryOrder.Count;
var qryProducts = (from p in _pro.Products
where p.ProductID == prodID
select new
{
p.ProductID,
p.ProductName
}).ToList();
var results = (from t in qryOrder
join s in qryProducts
on t.ProductID equals prodID
select new
{
t.ProductID,
t.Quantity,
s.ProductName
}).ToList();
OrderItemList.DataSource = results;
OrderItemList.DataBind();
}
}
誰能幫助解釋為什么它只填充第一個條目?
uj5u.com熱心網友回復:
如果涉及的產品數量相對較少(并且由于此查詢似乎與一張發票有關,我認為這是真的),那么您可能可以使用類似下面的代碼。
這是洗掉回圈,但 contains 方法可能會生成一個類似的 SQL 陳述句,select ProductID, ProductName from products where productID in (,,,,,,)如果引數數量非常大,可能會失敗。
var _ord = new OrdersContext();
var _pro = new ProductContext();
var qryOrder = (from o in _ord.OrderDetails
where o.InvNumberId == inv
select new
{
o.ProductID,
o.Quantity
}).ToList();
// Get the productIDs
var productIDS = qryOrder.Select(o=>o.ProductID).Distinct().ToList();
// Get the details of the products used.
var qryProducts = (from p in _pro.Products
where productIDS.Contains(p.ProductID)
select new
{
p.ProductID,
p.ProductName
}).ToList();
// Combine the two in memory lists
var results = (from t in qryOrder
join s in qryProducts
on t.ProductID equals s.ProductID
select new
{
t.ProductID,
t.Quantity,
s.ProductName
}).ToList();
OrderItemList.DataSource = results;
OrderItemList.DataBind();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/446708.html
