【发布时间】:2016-02-11 17:37:30
【问题描述】:
我正在尝试执行涉及嵌套成员的 LINQ to Entity 查询。下面是实体模式。为了简洁起见,我将代码保持在最低限度。
public class NAVSummary
{
public virtual IList<NAVStatus> Statuses { get; set; }
}
public class NAVStatus
{
[Key]
[Column(Order = 0), ForeignKey("NAVSummary")]
public string Portfolio { get; set; }
[Key]
[Column(Order = 1), ForeignKey("NAVSummary")]
public DateTime ValueDate { get; set; }
[Key, Column(Order = 3)]
public int StatusId { get; set; }
[JsonIgnore]
public virtual NAVSummary NAVSummary { get; set; }
[ForeignKey("StatusId")]
public NAVStatusMaster StatusMaster { get; set; }
}
[Table("NAVRec_StatusMaster")]
public class NAVStatusMaster
{
[Key]
public int Id { get; set; }
public string Description { get; set; }
}
DbContext 具有所有上述实体的 DbSet。
我有以下 LINQ 查询:
var navSummariesTemp = dbContext.NAVSummaries
.Include(n => n.Statuses)
.Include(n => n.Comments)
.Include(n => n.Statuses.Select(s => s.StatusMaster))
.Include(n => n.Extracts)
.Join(dbContext.NAVSummaries,
current => new
{
current.Portfolio,
PD = SqlFunctions.DatePart("dw", current.ValueDate) == 2 ? DbFunctions.AddDays(current.ValueDate, -3).Value :
SqlFunctions.DatePart("dw", current.ValueDate) == 1 ? DbFunctions.AddDays(current.ValueDate, -2).Value :
DbFunctions.AddDays(current.ValueDate, -1).Value
},
previous => new { previous.Portfolio, PD = previous.ValueDate },
(outer, inner) => new { outer, inner })
.Where(w => w.outer.Statuses.Count > 0)
.Select(s => new
{
DayOverDayChange = s.outer.DifferencePercent - s.inner.DifferencePercent,
IsChange = s.inner.DifferencePercent == s.outer.DifferencePercent ? false : true,
Statuses = s.outer.Statuses
}).Take(10).ToList();
上述查询产生除 NAVStatus.StatusMaster 属性之外的所有内容。虽然我使用 Include() 扩展在查询开始时包含了该属性,但 public NAVStatusMaster StatusMaster { get;放; } 仍然是 null。
但是,当我执行以下查询时,StatusMaster 字段确实是从数据库记录中设置的。
var statusResult = dbContext.NAVSummaries
.Include(n => n.Statuses)
.Include(n => n.Comments)
.Include(n => n.Statuses.Select(s => s.StatusMaster))
.Include(n => n.Extracts)
.Where(n => n.Statuses.Count > 0).First();
如果有人能帮我解决这个问题,我真的很感激。
【问题讨论】:
标签: c# entity-framework linq linq-to-entities