Tom*_*asz 4 c# linq conditional if-statement group-by
我有一个看似相当简单的要求,但环顾四周我无法得到一个简单的答案.我查看过MSDN论坛,Exper Exchange并没有给我任何实质内容.
我有以下LINQ代码
Dim SummaryLog As IQueryable(Of clPartCountSummary)
SummaryLog = From Inventory In db.tblPartCounts _
Where Inventory.InventoryCountId = InventoryCountId _
And Not Inventory.ActionId.HasValue _
Group By PartNumber = Inventory.PartNumber _
, Inventory.RevLevel, SAPLocation = Inventory.SAPLocation _
Into AggregatedProdLog = Group, Qty = Sum(Inventory.Quantity) _
Select New clPartCountSummary With
{.PartNumber = PartNumber,
.RevLevel = RevLevel,
.Qty = Qty,
.SAPLocation = SAPLocation}
Run Code Online (Sandbox Code Playgroud)
我希望能够有条件地分组RevLevel和SAPLocation.我将永远分组PartNumber,但其他两个是可选的.因此,如果变量bRevLevel为真,那么我们分组RevLevel,如果bSAPLocation为真,那么我们也分组SAPLocation.
任何帮助将不胜感激,我正处于多个SummaryLog定义开始看起来很吸引人的阶段.
谢谢,托马斯
希望这可以帮助....
public class TblPartCount
{
public int InventoryCountID { get; set; }
public int? ActionID { get; set; }
public string PartNumber { get; set; }
public int RevLevel { get; set; }
public string SAPLocation { get; set; }
public int Quantity { get; set; }
}
private static void ConditionalGroupBy()
{
bool pCheck = true;
var lList = new List<TblPartCount>
{
new TblPartCount { InventoryCountID = 1, ActionID = 2, PartNumber = "123", RevLevel = 1, SAPLocation = "AAAA", Quantity = 100 },
new TblPartCount { InventoryCountID = 1, ActionID = 2, PartNumber = "123", RevLevel = 1, SAPLocation = "BBBB", Quantity = 200 }
};
var lOutput = lList
.Where(pArg => pArg.InventoryCountID == 1)
.Where(pArg => pArg.ActionID != null)
.GroupBy(pArg => new
{
PartNumber = pArg.PartNumber,
RevLevel = pCheck ? pArg.RevLevel : 0,
SAPLocation = pCheck ? pArg.SAPLocation : String.Empty
})
.Select(pArg =>
new
{
PartNumber = pArg.Key.PartNumber,
RevLevel = pArg.Key.RevLevel,
SAPLocation = pArg.Key.SAPLocation,
Qtry = pArg.Sum(pArg1 => pArg1.Quantity)
});
foreach (var lItem in lOutput)
{
Console.WriteLine(lItem);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5747 次 |
| 最近记录: |