如何筛选表并选择id列中包含parentid的行

时间:2013-06-14 21:55:00

标签: c# linq dataset

我的表有两列id,parentid,我想过滤数据以选择有parentid的行(因为可能有没有parentid行的行)。

id parentid
1  null
2   1
3   1
4   2
5   10

我希望除了5,10以外的所有行都不是作为父级的子行(除非父级在那里,否则没有子级)。

我想要使用parentid的行,因为我正在使用树视图的数据。 我尝试了几种方法但没有得到我想要的东西。

var mycol = from t in ds.Tables[0].AsEnumerable()
    where t.Field<int>("Id") == t.Fields<int>("ParentId");
    select t;

DataRow[] drs = ds.Tables[0].Select("ParentId in Id");

2 个答案:

答案 0 :(得分:0)

要使ParentId的行不为空,请使用

var rows = from r in ds.Tables[0].Rows.AsEnumerable()
    where !r.IsNull("ParentId")
    select r;

var rows = ds.Tables[0].Rows.AsEnumerable().Where(r => !r.IsNull("ParentId"));

答案 1 :(得分:0)

目前还不清楚你想要什么。

如果您想要ParentId不为null的行,请使用其他答案之一。

如果您想要在数据集中某处使用Id作为ParentId的行,请使用以下内容:

var table = ds.Tables[0];

var parentIds = new HashSet<int>(
    from row in table.AsEnumerable()
    let parentId = row.Field<int?>("ParentId")
    where parentId != null
    select parentId.Value);

var rowsWhereIdIsAParentId =
    from row in table.AsEnumerable()
    let id = row.Field<int>("Id")
    where parentIds.Contains(id)
    select row;