0

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

id parentid
1个空
2 1
3 1
4 2
5 10

我想要除 5、10 之外的所有行,因为 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");
4

2 回答 2

0

不清楚你想要什么。

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

如果您想要在数据集中某处将 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;
于 2013-06-14T22:10:35.310 回答
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"));
于 2013-06-14T22:06:15.980 回答