C# C/LINQ选择具有相同属性的对象的子列表
我是LINQ的初学者,我想知道是否可以使用它来解决以下问题: 我有一门课:C# C/LINQ选择具有相同属性的对象的子列表,c#,linq,C#,Linq,我是LINQ的初学者,我想知道是否可以使用它来解决以下问题: 我有一门课: public class myClass { public int Id { get; set; } public int Category { get; set; } public string Text { get; set; } } 我有一个myClass对象的列表 public List<myClass> myList; 我的子列表中应该有对象A和B,可能不理想,但可能: var re
public class myClass
{
public int Id { get; set; }
public int Category { get; set; }
public string Text { get; set; }
}
我有一个myClass对象的列表
public List<myClass> myList;
我的子列表中应该有对象A和B,可能不理想,但可能:
var result = myList.GroupBy(x=>x.Text).Where(grp => grp.Count() > 1)
.SelectMany(x=>x); // .ToList() if you want a list
或在查询语法中:
var result = from x in myList
group x by x.Text into grp
where grp.Count() > 1
from y in grp
select y; // .ToList() if you want a list
这项工作:
var sublist = (from a in myList
from b in myList
where a.Text == b.Text
&& a.Id != b.Id
select a).Distinct();
测试程序:
void Main()
{
myClass A = new myClass { Id=1, Category=1, Text="Hello World!"};
myClass B = new myClass { Id=2, Category=2, Text="Hello World!"};
myClass C = new myClass { Id=3, Category=2, Text="Good Bye!"};
myClass D = new myClass { Id=4, Category=7, Text="Hello World!"};
List<myClass> myList = new List<myClass>();
myList.AddRange(new []{ A, B, C, D });
var sublist = (from a in myList
from b in myList
where a.Text == b.Text
&& a.Id != b.Id
select a).Distinct();
sublist.Dump();
}
public class myClass{ public int Id { get; set; } public int Category { get; set; } public string Text { get; set; }}
当有2个匹配项时有效,但当有更多匹配项时爆炸;因此,6个结果中有3个匹配结果,等等。@Marc-distinct添加到修复中:我投票选择这一个,它确实非常有效,目前我更喜欢查询语法,对我来说更容易理解:
void Main()
{
myClass A = new myClass { Id=1, Category=1, Text="Hello World!"};
myClass B = new myClass { Id=2, Category=2, Text="Hello World!"};
myClass C = new myClass { Id=3, Category=2, Text="Good Bye!"};
myClass D = new myClass { Id=4, Category=7, Text="Hello World!"};
List<myClass> myList = new List<myClass>();
myList.AddRange(new []{ A, B, C, D });
var sublist = (from a in myList
from b in myList
where a.Text == b.Text
&& a.Id != b.Id
select a).Distinct();
sublist.Dump();
}
public class myClass{ public int Id { get; set; } public int Category { get; set; } public string Text { get; set; }}