我需要一些帮助,为linq查询添加条件。
拿这个小例子
static void Main(string[] args)
{
List<ItemEntry> items = new List<ItemEntry>();
items.Add(new ItemEntry(1,1,5,1));
items.Add(new ItemEntry(2, 1, 5, 1));
items.Add(new ItemEntry(3, 1, 5, 1));
items.Add(new ItemEntry(4, 1, 10, 3));
items.Add(new ItemEntry(5, 2, 5, 1));
items.Add(new ItemEntry(6, 2, 5, 1));
items.Add(new ItemEntry(7, 2, 5, 1));
items.Add(new ItemEntry(8, 2, 5, 1));
items.Add(new ItemEntry(9, 2, 5, 2));
items.Add(new ItemEntry(10, 2, 5, 2));
var results = from data in items
group data by data.ItemTypeID
into grouped
select new { ItemID = grouped.Key, ItemPrice = grouped.Sum(data => data.ItemPrice) };
foreach (var item in results)
{
Console.WriteLine(item.ItemID + " " + item.ItemPrice);
}
Console.ReadLine();
}
}
public class ItemEntry
{
public int ItemID { get; set; }
public int ItemTypeID { get; set; }
public double ItemPrice { get; set; }
public int ProcessedType { get; set; }
public ItemEntry(int itemID, int itemTypeID,double itemPrice, int processedType)
{
ItemID = itemID;
ItemTypeID = itemTypeID;
ItemPrice = itemPrice;
ProcessedType = processedType;
}
}
我正在对ItemTypeID进行分组,然后根据正常的组创建总和。我现在需要添加额外的2个条件。 我想保持分组相同,但我想做同样的事情,如果ProcessedType == 1,如果它的类型2或3然后我想要总计它们然后从分组总数中减去它。
e.g。我将使用ItemTypeID 1 如果我总计所有ProcessedType 1我得到15并且如果我总共ProcessedType3我有10所以我想要返回5.
我不确定如何将条件添加到我的代码中。
任何帮助都会很棒!!!
TIA
答案 0 :(得分:0)
为您的班级添加一个新属性,为您完成工作。
public class ItemEntry
{
// keep the existing properties
...
public int TotalModifier
{
get
{
if (this.ProcessedType == 1)
return this.ItemPrice;
else
return -(this.ItemPrice);
}
}
现在总结新属性
var results = from data in items
group data by data.ItemTypeID
into grouped
select new { ItemID = grouped.Key, ItemPrice = grouped.Sum(data => data.TotalModifier) };
你想给这个属性一个比我更好的名字,但逻辑就在那里。