我目前正在编写一个非常基本的Web API应用程序,我有一个案例,我希望检索附加到数据实体的集合中的第一个项目。
举个例子,假设我有以下POCO课程:
class Parent {
int ParentId { get; set; }
string Name { get; set;}
string Description { get; set; }
virtual ICollection<Child> Children { get; set; }
}
class Child {
int ChildId { get; set;}
string Name {get; set;}
int ParentId { get; set; }
Parent Parent {get; set;}
}
显示两个实体之间的一对多关系。假设DbContext不是问题,其他一切都运行正常。我想按照以下方式执行某些操作:
DbContext.Parent.Include(d=>d.Children.Take(1)).ToList();
简而言之,“给我所有的父记录以及儿童集合的第一个条目”
但是我不能让这个工作。任何帮助将不胜感激。
答案 0 :(得分:0)
如果您希望所有父母和每位父母的第一个孩子一起使用,请使用:
DbContext.Parent.Include(d => d.Children.FirstOrDefault()).ToList();
或者,如果您希望所有父母只有一个孩子,您需要创建一个类,如下所示ParentChild:
Public class ParentChild
{
ICollection<Parent> Parents { get; set; }
Child OneChild {get;set;}
}
现在从DbContext中获取此对象,如:
var obj= new ParentChild()
{
Parents= DbContext.Parent.ToList(),
Child= DbContext.Child.FirstOrDefault(),
}
在您的应用程序中使用此对象obj。
答案 1 :(得分:0)
假设DbContext不是问题,其他一切都正常。 你可能需要创建一个新的投影来实现你想要的。
var projection = DbContext.Parent.Include(p => p.Children).Select(p => new {
ParentId = p.ParentId,
Name = p.Name,
Description = p.Description,
Child= p.Children.FirstOrDefault()
};
否则,如果要在db上下文中进行保存,则仅对第一个子项返回的返回父项的更改可能会导致意外问题。
但你可以这样做......
var projection = DbContext.Parent.Include(p => p.Children).Select(p => new Parent {
ParentId = p.ParentId,
Name = p.Name,
Description = p.Description,
Children = p.Children.Take(1).ToList()
};
..创建一个未附加到上下文的新对象