2017-08-29 21 views
0

嘿,我有以下两个类:LINQ的加入到对象的列表属性

public class Project 
{ 
    public int Id { get; protected set; } 
    public string ProjectName { get; protected set; } 
    public List<Task> TaskList{ get; protected set; } 
} 

public class Task 
{ 
    public int Id { get; protected set; } 
    public int ProjectId { get; protected set; } 
    public string Name { get; protected set; } 
} 

如果我使用实体框架是可以从数据库中获取项目对象,并在同一时间(例如,通过ID)。将任务列表连接到[Project] TaskList属性中,或者我应该先获取一个项目,然后执行任务?

它应该如何正确实施?

+2

查找到的导航性能和'.Include' –

+0

它的工作原理。这种解决方案的优点和缺点是什么? – bielu000

+0

看看https://stackoverflow.com/q/1262307/6400526。可以帮助 –

回答

1

如果你描述表之间的关系项目和任务解释here 比你可以直接调用你的项目实体;它将附带一份相关任务清单;如果您没有描述关系,那么您必须创建linq to etnity的连接查询,或者将.Inlcude用于相互关联的实体。

var tasks = (from items in db.Task 
join projects in db.Project on items.ProejctId equals projects.Id 
where 1==1 // you can add some other confitions to here 
select new SelectItemsList() { //Items you want to select }) 
1

您是否需要像下面的代码那样的Project类对象?不使用.INCLUDE <>

var res = (from p in db.ProjectTable 
      select new Project 
      { 
       Id = p.Id, 
       ProjectName = p.ProjectName, 
       TaskList = (from q in db.TaskTable 
         where q.ProjectId = p.Id 
         select q 
        ).ToList() 
      }).ToList(); 
return res; //you will get List<Project> with their List<TaskList> 
+0

对于单个项目,使用条件与项目表一样,其中p.ProjectId == projectId(projectId可能是参数变量) –

+1

这种方法看起来不错。 – bielu000

相关问题