2

我有一个包含界面项目的列表IGrid(我创建了它)

public interface IGrid
{
   RowIndex { get; set; }
   ColumnIndex { get; set; }
}

我想创建一个将列表分隔为多个列表的方法List>

基于 RowIndex 属性

所以我写道:

public List<List<IGrid>> Separat(List<IGrid> source)
{
     List<List<IGrid>> grid = new List<List<IGrid>>();
     int max= source.Max(c => c.RowIndex);
     int min = source.Min(c => c.RowIndex);

     for (int i = min; i <= max; i++)
     {
          var item = source.Where(c => c.RowIndex == i).ToList();
           if (item.Count > 0)
                grid.Add(item);
           }
           return grid;
     }
}

有什么更好的方法来做到这一点?

4

1 回答 1

5

是的,您可以在一个语句中使用 LINQ:

public List<List<IGrid>> Separat(List<IGrid> source) {
    return source
        .GroupBy(s => s.RowIndex)
        .OrderBy(g => g.Key)
        .Select(g => g.ToList())
        .ToList();
}

如果您不关心列表以您的方法生成它们的方式的升序显示RowIndex,您可以OrderBy从方法调用链中删除方法调用。

于 2013-06-08T09:54:16.067 回答