在列表中选择项目

时间:2014-01-05 18:00:34

标签: c# list

我有一个DataTable,我已将其转换为列表。我想知道如何查询列表并创建一个父列表为空的新列表。

DataTable myTable = new DataTable();
myTable.Columns.Add("ParentID", typeof(string));
myTable.Columns.Add("ID", typeof(string));
myTable.Rows.Add(null, "CEO");
myTable.Rows.Add("CEO", "FD");
myTable.Rows.Add("CEO", "CIO");

List<DataRow> lst = myTable.AsEnumerable().ToList();

我正在尝试类似的事情:

List<DataRow> topNodes = lst.Select("ID is null")

感谢。

3 个答案:

答案 0 :(得分:0)

尝试一下,假设您可以使用LINQ

var topNodes = lst.Where(l => (!(l.ID.HasValue))).ToList();

编辑:

我看到你的ID是String,所以它应该是这样的:

var topNodes = lst.Where(l => ID.IsNullOrEmpty()).ToList();

编辑:

列表为DataRow所以:

var topNodes = lst.Where(row => row["ID"].IsNullOrEmpty()).ToList();

编辑:

您添加了有关您要执行的操作的更多信息。如果您只需要列表或DataRow,我会先过滤,然后转换为列表:

var topNodes = myTable.Select("ID is null").AsEnumerable().ToList();

答案 1 :(得分:0)

您可以尝试此操作 - 搜索连续的所有单元格,其内容为null。请注意,在这种情况下(对于给定的输入 - ParentId列的类型为string),行值必须转换为字符串:

// get only those items where ParentId is null      
var topRows = myTable
                .AsEnumerable()
                .ToList()
                .Where (row => string.IsNullOrEmpty(row["ParentID"].ToString()))
                .ToList();

给定输入的输出(作为DataRows列表)是:

ParentID    |   ID 
-------------------
null        |   CEO  

答案 2 :(得分:0)

注意:请参阅原始帖子下的评论。

List<DataRow> lst = myTable.Select("ParentID is null").ToList();

编辑:我看到我的回答与Kris Ivanov非常相似,但是我的回答有点简单,并且没有使用有害的var关键字,我建议在评论中首先使用Table.Select。所以,我会留下它。