我有一个linq连接,它应该返回过滤结果,而是返回我开始的列表中的所有元素。总之,我有一个初始 元素列表,infoScrpimdt,使用Linq过滤到其他一些列表中, totalQtyPO,totalQtySTForPart等;然后我谈到了sql join,这就是:
var infoDetailed =
(
from infoWhse in infoScrpimdt
join infoPO in totalQtyPO on infoWhse.PartNo.Trim().ToLower() equals infoPO.PartNo.Trim().ToLower() into inf1
from info1 in inf1.DefaultIfEmpty()
join infoST in totalQtySTForPart on infoWhse.PartNo.Trim().ToLower() equals infoST.PartNo.Trim().ToLower() into inf2
from info2 in inf2.Where(i => i.WhseId == infoWhse.WhseId.ToString()).DefaultIfEmpty()
join infoDimInv in dimInventoryTotals on infoWhse.PartNo.Trim().ToLower() equals infoDimInv.PartNo.Trim().ToLower() into inf3
from info3 in inf3.DefaultIfEmpty()
join infoSku in partSKUs on infoWhse.PartNo.Trim().ToLower() equals infoSku.partnumber.Trim().ToLower() into skuInfos
from infSku in skuInfos.DefaultIfEmpty()
select new DTBackOrderModel
{
WhseId = infoWhse.WhseId,
QtyBO = infoWhse.QtyBO,
QtyOH = info3 != null ? info3.QtyOH : 0,
OnOrder = Int32.Parse(infoWhse.OnOrder),
UnitCost = info1 != null
?
(decimal)info1.UnitCost.Value
:
info3 != null
?
info3.LastUnitCost
:
0,
PartNo = infoWhse.PartNo,
QtyPO = info1 != null ? (int)info1.QtyPO : 0,
PODate = info1 != null
?
info1.PODate != null ? info1.PODate.Value.ToShortDateString() : "No ETA"
:
"No ETA",
QtyST = info2 != null ? info2.QtyST : 0,
DTSku = (infSku != null && !string.IsNullOrEmpty(infSku.DTSku)) ? infSku.DTSku : "-"
}
).Where(b => b.QtyBO > 0).OrderBy(i => i.QtyST).ToList();
最终得到完整的infoScrpimdt列表,而不是获得过滤结果列表;没有过滤!!