C# 如何使用.Net Linq获取家长记录

C# 如何使用.Net Linq获取家长记录,c#,.net,linq,C#,.net,Linq,我有一个叫做dt的数据表 这个表中有记录 ID Code FullTxt ParentID 1 A Tom NULL 2 A1 John 1 3 A2 Rich 1 4 A11 Carol 2 5 A12 Nancy 2 6 A21 Ali 3 7 B Mark NULL 当用户搜索A21时,我过滤dt以查找A21,然后将其作为更新的数据表发送 这是我的密码 DataTable dx =

我有一个叫做dt的数据表

这个表中有记录

ID Code  FullTxt ParentID
1  A     Tom     NULL
2  A1    John    1
3  A2    Rich    1
4  A11   Carol   2
5  A12   Nancy   2
6  A21   Ali     3
7  B     Mark    NULL
当用户搜索A21时,我过滤dt以查找A21,然后将其作为更新的数据表发送

这是我的密码

    DataTable dx = null;
    var rows = dt.AsEnumerable()
        .Where(x => x["FullTxt"].ToString().Contains(SearchTxt) 
        || x["Code"].ToString().Contains(SearchTxt)
        );

    if (rows.Any())
        dx = rows.CopyToDataTable();
我需要在此筛选器中包括家长记录

如果用户搜索A21

然后,这些记录应包含在过滤结果中

ID Code  FullTxt ParentID
1  A     Tom     NULL
3  A2    Rich    1
6  A21   Ali     3
我尝试将我的代码更新到此版本,但它不起作用

    var rows = dt.AsEnumerable()
        .Where(x => x["FullTxt"].ToString().Contains(SearchTxt) 
        || x["Code"].ToString().Contains(SearchTxt) || x["ID"] = x["ParentID"] 
        );
知道如何让它工作吗?

类似于:

var rows = dt.AsEnumerable().Where(x => searchText.Contains((string)x["Code"])).ToList();
var parentRows = dt.AsEnumerable().Where(x => x["ParentID"] != DBNull.Value && searchText.Contains((string)x["Code"])).Select(x => (int)x["ParentID"]).ToList(); 
其中,x.Field(1)以包含字符串值的第二列(“代码”)为目标

要特别从搜索中获取所有父ID,请执行以下操作:

var rows = dt.AsEnumerable().Where(x => searchText.Contains((string)x["Code"])).ToList();
var parentRows = dt.AsEnumerable().Where(x => x["ParentID"] != DBNull.Value && searchText.Contains((string)x["Code"])).Select(x => (int)x["ParentID"]).ToList(); 
你在正确的轨道上

类似于:

var rows = dt.AsEnumerable().Where(x => searchText.Contains((string)x["Code"])).ToList();
var parentRows = dt.AsEnumerable().Where(x => x["ParentID"] != DBNull.Value && searchText.Contains((string)x["Code"])).Select(x => (int)x["ParentID"]).ToList(); 
其中,x.Field(1)以包含字符串值的第二列(“代码”)为目标

要特别从搜索中获取所有父ID,请执行以下操作:

var rows = dt.AsEnumerable().Where(x => searchText.Contains((string)x["Code"])).ToList();
var parentRows = dt.AsEnumerable().Where(x => x["ParentID"] != DBNull.Value && searchText.Contains((string)x["Code"])).Select(x => (int)x["ParentID"]).ToList(); 

你在正确的轨道上

您可以只获取与搜索匹配的记录,然后递归地获取它的父项并连接结果。这只是部分LINQ解决方案,但应该很简单。您可以只获取与搜索匹配的记录,然后递归地获取其父项并连接结果。这只是部分LINQ解决方案,但应该很简单