我有一个RowData项列表(一个自定义类)。
RowData项包含CellData项的列表(另一个自定义类)。
目前,访问每个CellData项的唯一方法是通过RowData的this[int index],这意味着我必须为每个搜索创建一个循环。
我想要的是创建一个方法,该方法将返回给定index值的所有index项:
private List<RowData> rowList;
public IEnumerable<CellData> Cells(int index) {
foreach (var row in rowList) {
if (row.ID == index) {
return row.AsEnumerable<CellData>();
}
}
return null;
}我不想返回NULL,我想知道如何使用一些LINQ技术(either or syntax)来完成这个任务。
发布于 2011-07-08 20:31:14
为了能够使用LINQ语法从行获取单元格集合,您的RowData需要是可枚举的,即实现IEnumerable接口。
通过您的示例中的.AsEnumerable<CellData>(),我假设您的RowData已经实现了它,并且枚举RowData返回CellData对象的集合。
如果不是,您需要自己在IEnumerable中实现RowData。如果您的this[int index]访问器从集合中读取数据,则只需返回该集合的GetEnumerator。
然后,您将能够使用LINQ查询从RowData集合中获取RowData集合,例如:
var cells = rowList.Where(x => x.ID == index).SelectMany(x => x);发布于 2011-07-08 20:28:28
假设给定一个索引只返回一行:
public IEnumerable<CellData> Cells(int index)
{
var foundRow = rowList.FirstOrDefault(row => row.ID == index);
//if no row was found, foundRow will be null
if(foundRow != null)
return foundRow.AsEnumerable<CellData>();
else
return new CellData[]; //return empty cells IEnumerable. Could also be new List<CellData>()
}
}此代码假定foundRow.AsEnumerable<CellData>()返回一个IEnumerable<CellData>。
您必须检查是否无效,因为在给定索引处的行可能也不会被找到。
发布于 2011-07-08 20:26:51
那麽:
List<CellData> cells = rowList.Where(x => x.Index == index).SelectMany(x => x.Cells).ToList();https://stackoverflow.com/questions/6630077
复制相似问题