从C#列表中选择不同的值 [英] Select Distinct Values from C# List
问题描述
我在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屋!