提问人:beeeeeeeeeen 提问时间:6/14/2023 最后编辑:Mark Schultheissbeeeeeeeeeen 更新时间:6/14/2023 访问量:44
从子 ID LINQ 中选择项的父项
Selecting the Parents of item from Child ID LINQ
问:
类型等级:
public partial class URS_Types
{
[Key]
public int ID { get; set; }
public string TypeName { get; set; }
public int? ParentID { get; set; }
}
我正在尝试创建一个子方法,该子方法将接收请求“类型”的 ID,然后它将获得它的父级(使用 parentID),然后获取它的父级,直到没有其他类别。
我已经尝试了以下方法,但显然由于选择命令,这仅返回第一种类型,但不确定如何告诉它选择所有类型。
var types = GetURS_Types();
var test = from type in types
where type.ID == id
join type2 in types
on type.ParentID equals type2.ID
join type3 in types
on type2.ParentID equals type3.ID
select type.TypeName;
答:
0赞
Nathan
6/14/2023
#1
假设您有一个对象URS_Types列表,其中 ParentID = 0 的对象是真正的父元素。
URS_Types parentParent = new URS_Types();
parentParent.ID = 1;
parentParent.ParentID = 0;
parentParent.TypeName= "parentParent";
URS_Types parent = new URS_Types();
parent.ID = 2;
parent.ParentID = 1;
parent.TypeName = "parent";
URS_Types child = new URS_Types();
child.ID = 3;
child.ParentID = 2;
child.TypeName = "child";
URS_Types noParentType = new URS_Types();
noParentType.ID = 4;
noParentType.ParentID = 0;
noParentType.TypeName = "No parent";
List<URS_Types> listType = new List<URS_Types>();
listType.Add(parentParent);
listType.Add(parent);
listType.Add(child);
listType.Add(noParentType);
listType = listType.OrderBy(a => rng.Next()).ToList();
它返回函数,ID 为 3(表示它是子对象)。我们可以做一个小的 while 循环来检索这个对象的真正父级。GetURS_Types()
var childId = GetURS_Types(child); // will return an int: 3
int trueParent = childId;
URS_Types theTrueParent;
while (trueParent > 0)
{
theTrueParent = listType.First(x => x.ID == trueParent);
trueParent = listType.First(x => x.ID == trueParent).ParentID;
}
注意:我们永远不会得到对象 noParentType(除非我们要求它的 ID),因为我们在 ParentID 属性之后的列表中工作。GetURS_Types()
评论
URS_Types