带有Min和Projection的GroupBy的IEnumerable查询

时间:2013-04-10 20:13:28

标签: linq data-structures linq-to-objects

我将这些数组与索引相关联。所以对于每个索引(ObjId,ObjState)形成一对。

 string[] ObjIds = { "Obj1", "Obj1", "Obj2", "Obj2", "Obj1", "Obj3", "Obj2", "Obj2" };
 string[] ObjStates = { "OS11", "OS12", "OS21", "OS22", "OS13", "OS31", "OS22", "OS23" };

但是我只想要每个ObjId的最近一对(最接近索引0)。

对于上述输入,输出将为

{  Obj1, OS11 }, {Obj2, OS21}, {Obj3, OS31}

如何使用IEnumerable查询执行此操作?我无法弄清楚如何跟踪索引。

1 个答案:

答案 0 :(得分:3)

你应该可以这样做:

var items = ObjIds.Zip(ObjStates, (id, st) => new {Id = id, State = st})
                  .GroupBy(i => i.Id)
                  .Select(g => g.First());
这里使用

Enumerable.Zip将您的项目“配对”为新的匿名类型,然后将项目分组,并从每个组中选择第一项。