我有一个包含一列外键,该外键与同一表中的主键相关联的Entity Framework类如下所示:
上述映射很棒,我能够通过传递ItemParentID并选择Items来获得Children属性中的所有子项,直到第n级。
在我的业务逻辑中,我有ParentItemID和ChildItemID,并且我必须检查是否在ParentItemID的Children项层次结构中的任何位置存在ChildItemID,它可以存在于ParentItems -> Children及其Children及其Children等中。
我尝试了以下lambda表达式,但仅适用于两个级别的子项:
我该如何编写简单的LINQ或Lambda语句来返回一个布尔值,以实现这一目标?
[Table("Items")]
public class Item
{
[Key]
public long ItemID { get; set; }
public string ItemName { get; set; }
public long? ItemParentID { get; set; }
[ForeignKey("ItemParentID")]
public virtual Item Parent { get; set; }
public virtual ICollection<Item> Children { get; set; }
}
上述映射很棒,我能够通过传递ItemParentID并选择Items来获得Children属性中的所有子项,直到第n级。
在我的业务逻辑中,我有ParentItemID和ChildItemID,并且我必须检查是否在ParentItemID的Children项层次结构中的任何位置存在ChildItemID,它可以存在于ParentItems -> Children及其Children及其Children等中。
我尝试了以下lambda表达式,但仅适用于两个级别的子项:
ParentItem.Children.Contains(context.Items.Where(x => x.ItemID == ChildItem).FirstOrDefault())
我该如何编写简单的LINQ或Lambda语句来返回一个布尔值,以实现这一目标?
Entity Framework
内部找到解决方案,因为它已经能够获取所有子项到第 n 级,而不需要编写任何复杂的递归LINQ
语句。 - seadrag0n