从C#列表中选择不同的值 [英] Select Distinct Values from C# List

查看:177
本文介绍了从C#列表中选择不同的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Linq语句下面有以下内容,我用它来选择列表中有多少值myList

I have the following below Linq Statement which I use to select how many Value I have in a list myList

class MyClassDetails { public string ID; public int Value; } class MyClass { public MyClass() { moreDetails = new ObservableCollection<MyClassDetails>(); } public string Name; public ObservableCollection<MyClassDetails> moreDetails; } static void Main(string[] args) { var myList = new List<MyClass>(); var myClass1 = new MyClass(); myClass1.Name = "Class1"; myClass1.moreDetails.Add(new MyClassDetails() { Value = 1, ID="ONE" }); myClass1.moreDetails.Add(new MyClassDetails() { Value = 2, ID = "TWO" }); myClass1.moreDetails.Add(new MyClassDetails() { Value = 4, ID = "ONE" }); myClass1.moreDetails.Add(new MyClassDetails() { Value = 8, ID = "TWO" }); myClass1.moreDetails.Add(new MyClassDetails() { Value = 16, ID = "ONE" }); var myClass2 = new MyClass(); myClass2.Name = "Class2"; myClass2.moreDetails.Add(new MyClassDetails() { Value = 1, ID = "TWO" }); myClass2.moreDetails.Add(new MyClassDetails() { Value = 2, ID = "ONE" }); myClass2.moreDetails.Add(new MyClassDetails() { Value = 4, ID = "ONE" }); myClass2.moreDetails.Add(new MyClassDetails() { Value = 8, ID = "TWO" }); myClass2.moreDetails.Add(new MyClassDetails() { Value = 54, ID = "ONE" }); myList.Add(myClass1); myList.Add(myClass2); var groups2 = myList.SelectMany(myClass => myClass.moreDetails, (myClass, details) => new { details.Value, myClass.moreDetails }) .GroupBy(myClass => myClass.Value) .Select(g => new { Value = g.Key, Count = g.ToList().Distinct().Count() }); foreach (var group in groups2) { var value = group.Value;

var count = group.Count;
}

var count = group.Count; }

所以上面会输出以下内容:

So the above will output the following:

group1:Value 1 Count 2

group1: Value 1 Count 2

group2:值2计数2

group2: Value 2 Count 2

group3:值4计数2

group3: Value 4 Count 2

group4:值8计数2

group4: Value 8 Count 2

group5:Value 54 Count 1

group5: Value 54 Count 1

我只想按ID计算不同的值

I want to only count the Distinct Values by ID

因此,对于上述情况,第3组和第4组只有count = 1,因为它们具有相同的ID值

So for the above the groups 3 and 4 would only have count=1 as they have the same ID values

group3:Value 4 Count 1

group3: Value 4 Count 1

group4:值8计数1

group4: Value 8 Count 1

如何修改查询以执行此操作?

How do I modify my query to do this?

推荐答案

试试这个:

var groups3 = myList
                 .SelectMany( c => c.moreDetails )
                 .GroupBy( d => d.Value )
                 .Select( g => new { Value = g.Key, Count = g.GroupBy( d => d.ID ).Count() } );

这个:

var groups4 = myList
                 .SelectMany( c => c.moreDetails )
                 .GroupBy( d => d.Value, ( k, e ) => new { Value = k, Count = e.GroupBy( d => d.ID ).Count() } );








这篇关于从C#列表中选择不同的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆