2010-03-22 53 views
2

我需要一些帮助将条件添加到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,那么我想总计它们,然后减去它分组总数。

例如我将使用ItemTypeID 1 如果我总计所有ProcessedType 1我得到15,如果我总ProcessedType3我有10所以我想返回5.

我不知道如何将条件添加到我的代码。

任何帮助将是伟大的!

TIA

回答

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

你想给这个属性比我有更好的名字,但逻辑是有你。

+0

H柯克感谢您的回复。这是一个梦想:) – 2010-03-22 17:19:07

+0

对不起还有一个问题。而不是使用通用列表来获取如果我想使用LINQ-SQL的值。假设所有的字段都有相同的名称,但是我没有在数据库中的TotalModifier字段。 对不起,我对linq很新颖 – 2010-03-22 19:50:51

相关问题