LINQ分组并根据返回的结果创建公式

时间:2010-03-22 10:41:44

标签: linq

我需要一些帮助,为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

1 个答案:

答案 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) };

你想给这个属性一个比我更好的名字,但逻辑就在那里。