我有以下LINQ查询:执行1对1的左外连接在LINQ使用Lambda表达式
dbContext.NAVSummaries
.Join(dbContext.NAVSummaries.DefaultIfEmpty(),
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 => previous == null ? null : new { previous.Portfolio, PD = previous.ValueDate },
(outer, inner) => new { outer, inner }
)
.Where(n => !dateStart.HasValue || n.outer.ValueDate.CompareTo(dateStart.Value) >= 0)
.Where(n => !dateEnd.HasValue || n.outer.ValueDate.CompareTo(dateEnd.Value) <= 0)
有用于给定ValueDate记录x个,且x-1上的记录数这是以前的生意日期。 NAVSummaries DbSet在ValueDate列中自加入,并且ValueDate项目与之前的业务日期匹配。但是,输出结果只有x-1。我希望执行左外连接,以便返回左表/集合的所有x记录。
编辑:将只有一个记录/项目与上一个业务日期匹配。所以它必须是一对一的映射。
NavSummary实体:
public class NAVSummary
{
[Key, Column(Order = 0)]
public string Portfolio { get; set; }
[Key, Column(Order = 2)]
public DateTime ValueDate { get; set; }
public decimal BackOfficeNAV { get; set; }
public decimal FrontOfficeNAV { get; set; }
public decimal DifferencePercent { get; set; }
public decimal Threshold { get; set; }
public int ExtractId { get; set; }
public string ExtractStatus { get; set; }
public string PortfolioOwner { get; set; }
public DateTime DateTimeModified { get; set; }
public int MostCorrectNAV { get; set; }
public virtual IList<NAVComment> Comments { get; set; }
public virtual IList<NAVStatus> Statuses { get; set; }
public virtual IList<NAVExtract> Extracts { get; set; }
[JsonIgnore]
[NotMapped]
public bool IsChange { get; set; }
[NotMapped]
public decimal DayOverDayChange { get; set; }
[JsonIgnore]
[NotMapped]
public DateTime PreviousValueDate { get; set; }
[JsonIgnore]
[NotMapped]
public decimal PreviousDP { get; set; }
}
可以显示类? –
@LucianBumb,添加了NavSummary实体类 – Lucifer
它有点令人困惑,为什么你要尝试使用LEFT JOIN,在一个实体内部,你能显示你想要这个查询的结果吗? –