我有以下课程:
public class Problem
{
public Problem()
{
this.Questions = new HashSet<Question>();
this.Solutions = new HashSet<Solution>();
}
public int ProblemId { get; set; }
public string Title { get; set; }
public string Note { get; set; }
public virtual ICollection<Question> Questions { get; set; }
public virtual ICollection<Solution> Solutions { get; set; }
}
public class Question
{
public int QuestionId { get; set; }
public int ProblemId { get; set; }
public int QuestionStatusId { get; set; }
public string Note { get; set; }
public virtual Problem Problem { get; set; }
}
public class Solution
{
public int SolutionId { get; set; }
public int Number { get; set; }
public int ProblemId { get; set; }
public bool? Correct { get; set; }
public string Text { get; set; }
public string Note { get; set; }
public virtual Problem Problem { get; set; }
}
有人可以帮助我使用LINQ for my EF6,1 SQL Server 2012。
我想要做的是获取仅包含数据子集的List。在这种情况下,我希望问题,问题和解决方案实体中的Notes属性从数据库中获取 not 。
请注意,问题和解决方案表已连接到问题表。我不是100%肯定这一点,但我认为这意味着我不需要添加.Include。
理想情况下,我希望EF导致问题的选择不包括Notes列。
答案 0 :(得分:0)
您可以使用.Select(...)来避免从db中获取冗余数据。下面的代码说明了如何仅使用ProblemId和Title字段获取问题列表:
var result = context.Problems.Select(problem => new { ProblemId = problem.ProblemId , Title = proble.Title }).ToList();
使用上面的.Select将生成SQL查询“SELECT p.ProblemId,p.Title from dbo.Problems as p”。 使用.List将检索数据(它将不再依赖于上下文) 您可能会将结果设置为问题类型,例如:
var newResult = result.Select(x=>new Problem() { ProblemId = x.ProblemId, Title = x.Title } )
答案 1 :(得分:0)
您可以使用EF的表格分割功能。创建Problem(PK+all fields except for Notes)
和ProblemNotes(PK+Notes)
个实体。然后查询问题应该满足您的需求。
http://msdn.microsoft.com/en-us/data/jj715645.aspx
使用Entity Framework表拆分,您可以将可能包含大量数据的属性分隔为单独的实体,并仅在需要时加载它。