C# c Linq删除重复项并计算平均值

C# c Linq删除重复项并计算平均值,c#,linq,group-by,C#,Linq,Group By,例如,我有一个对象属性列表:名称和值 项目1 20; 项目2 30; 项目150; 我想要结果: 项目1 35 20+50/2 项目2 30 我该怎么做 谢谢 抱歉,伙计们,重复项基于item.Name var results = from kvp in source group kvp by kvp.Key.ToUpper() into g select new { Key= g.Key, Value= g.Average(kvp => kvp.Value

例如,我有一个对象属性列表:名称和值

项目1 20; 项目2 30; 项目150; 我想要结果:

项目1 35 20+50/2 项目2 30 我该怎么做

谢谢 抱歉,伙计们,重复项基于item.Name

var results =
  from kvp in source
  group kvp by kvp.Key.ToUpper() into g
  select new
  {
    Key= g.Key,
    Value= g.Average(kvp => kvp.Value)
  }


您可以使用average和group by来完成此操作:

public class myObject
{
    public string Name {get;set;}
    public double Value {get;set;}
}

var testData = new List<myObject>() { 
                                    new myObject() { Name = "item1", Value = 20 },
                                    new myObject() { Name = "item2", Value = 30 },
                                    new myObject() { Name = "item1", Value = 50 }
                                    };


var result = from x in testData
             group x by x.Name into grp
             select new myObject() { 
                                    Name=grp.Key,
                                    Value= grp.Average(obj => obj.Value)
                                    };

你能提供更多的信息吗?例如,您根据什么确定第一个和最后一个项目的平均值。另外,您说要过滤掉重复项,但示例列表中没有重复项。请花几秒钟时间在谷歌上搜索MSDN LINQ Distinct和MSDN LINQ Average。@Pierre Lucpinoult虽然我同意OP应该花更多时间研究,但他显然不知道Distinct一词,至少在这种情况下是这样的。此外,distinct是错误的-他想分组。@Jonathon Reinhard,但即使是寻找Linq删除重复项目也会得到几十个结果,所以。。。显然需要更多的研究。@Pierre Luccinoult你读过我的评论了吗?我同意OP应该花更多的时间研究——我只是在质疑DistinctHanks Robert的整个前提。这就是我想要的。var results=source.GroupByc=>c.Name.Selectc=>newc.Key,c.Averaged=>d.Value;使用query和fluent syntaxesThanks squid更新;-海星
public class myObject
{
    public string Name {get;set;}
    public double Value {get;set;}
}

var testData = new List<myObject>() { 
                                    new myObject() { Name = "item1", Value = 20 },
                                    new myObject() { Name = "item2", Value = 30 },
                                    new myObject() { Name = "item1", Value = 50 }
                                    };


var result = from x in testData
             group x by x.Name into grp
             select new myObject() { 
                                    Name=grp.Key,
                                    Value= grp.Average(obj => obj.Value)
                                    };