首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从TList中选择LINQ?

从TList中选择LINQ?
EN

Stack Overflow用户
提问于 2011-07-08 20:23:14
回答 5查看 618关注 0票数 0

我有一个RowData项列表(一个自定义类)。

RowData项包含CellData项的列表(另一个自定义类)。

目前,访问每个CellData项的唯一方法是通过RowDatathis[int index],这意味着我必须为每个搜索创建一个循环。

我想要的是创建一个方法,该方法将返回给定index值的所有index项:

代码语言:javascript
复制
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)来完成这个任务。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-08 20:31:14

为了能够使用LINQ语法从行获取单元格集合,您的RowData需要是可枚举的,即实现IEnumerable接口。

通过您的示例中的.AsEnumerable<CellData>(),我假设您的RowData已经实现了它,并且枚举RowData返回CellData对象的集合。

如果不是,您需要自己在IEnumerable中实现RowData。如果您的this[int index]访问器从集合中读取数据,则只需返回该集合的GetEnumerator

然后,您将能够使用LINQ查询从RowData集合中获取RowData集合,例如:

代码语言:javascript
复制
var cells = rowList.Where(x => x.ID == index).SelectMany(x => x);
票数 4
EN

Stack Overflow用户

发布于 2011-07-08 20:28:28

假设给定一个索引只返回一行:

代码语言:javascript
复制
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>

您必须检查是否无效,因为在给定索引处的行可能也不会被找到。

票数 1
EN

Stack Overflow用户

发布于 2011-07-08 20:26:51

那麽:

代码语言:javascript
复制
List<CellData> cells = rowList.Where(x => x.Index == index).SelectMany(x => x.Cells).ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6630077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档