假设我有一个列表,List<Foo> SomeList
,Foo
是一个包含两个属性Bar
和Baz
的类。
是否有LINQ查询允许我选择Foo
共享相同值的Bar
类型的所有项目,以便它们可以一起处理?
类似的东西:
foreach (List<Foo> foos in SomeList.SelectBy (x => x.Bar))
{
// process foos
}
以便首先处理包含Foo
的所有Bar = 0
项,然后将Bar
设置为1,依此类推。
这可以轻松完成,还是我需要自己编写该功能?
答案 0 :(得分:2)
您需要的是先按照分组,然后按键排序列表中的项目。
var grouped = SomeList.GroupBy(item => item.Bar)
.OrderBy(gr=>gr.Key);
foreach (var item in grouped)
{
// item has a Key property associated with the value of Bar
// You can take the list of Foo by simply calling this
// item.ToList() and then you can process this.
}
答案 1 :(得分:0)
你的问题不够明确,所以我猜错了。希望您正在寻找以下内容:
List<Foo> SomeList = new List<Foo>();
SomeList.Add(new Foo() {Bar=1,Baz ="ASDASD"});
SomeList.Add(new Foo() {Bar=2,Baz ="dqwe"});
SomeList.Add(new Foo() { Bar = 5, Baz = "fsdfsgsdg" });
SomeList.Add(new Foo() { Bar = 5, Baz = "dghjhljkl" });
foreach(Foo f in SomeList.Where(x=>x.Bar==5).ToList())
{
// do some operations
}
它允许您选择共享相同类型的所有Foo类型的项目 Bar的值(此处为
5
,如果需要,请将其设置为动态)
根据 Christos的建议,如果订单很重要,您可以申请OrderBy
。