[英]Include Entities to Child Collection With Filter Linq EF5
我在過濾子集合時遇到問題,過濾已完成,但是我需要在集合中包括其他實體,我不知道該怎么做
我有實體員工
public class Employee
{
[Key]
public int EmployeeId { get; set; }
public string EmpNum { get; set; }
public virtual ICollection<EmployeeProfile> EmployeeProfiles { get; set; }
}
和集合實體EmployeeProfile
public class EmployeeProfile
{
[Key]
public int EmployeeProfileId { get; set; }
[ForeignKey("Employee")]
public int EmployeeId { get; set; }
public string EmployeeName { get; set; }
[ForeignKey("Nationality")]
public int? NationalityId{ get; set; }
....
public DateTime? UpdateDatetime { get; set; }
public virtual Nationality Nationality{ get; set; }
public virtual Employee Employee { get; set; }
}
我用投影來過濾
var employees = context.Employees
.Include(e => e.EmployeeProfiles)
.Include(e => e.EmployeeProfiles.Select(a => a.Nationality))
.Select(e => new EmployeeLeatestProfileModel
{
EmployeeId = e.EmployeeId
,
EmpNum = e.EmpNum
,
LastUpdatedProfile = e.EmployeeProfiles
.Where(p => p.EmployeeId == e.EmployeeId)
.OrderByDescending(a => a.UpdateDatetime).Take(1)
});
這就是結果模型
public class EmployeeLeatestProfileModel {
public int EmployeeId { get; set; }
public string EmpNum { get; set; }
public IEnumerable<EmployeeProfile> LastUpdatedProfile;
}
事情是當我嘗試獲取國籍時,我沒有找到它的數據,這似乎不包含在查詢中!!
所以我該怎么做才能為孩子集合EmoployeeProfile包括國籍實體或其他任何實體
而且我沒有使用延遲加載
代替使用投影,您可以使用對象查詢包括傳遞一個字符串。
https://msdn.microsoft.com/en-us/library/bb738708(v=vs.110).aspx
.Include(e => e.EmployeeProfiles)
.Include("EmployeeProfiles.Nationality")
.Include("EmployeeProfiles.Employee")
尚未對此進行測試,但請嘗試選擇一個匿名集合。
var employees = context.Employees
.Select(e => new
{
Employee = e,
EmployeeProfiles = e.EmployeeProfiles,
Nationalities = e.EmployeeProfiles.Select(a => a.Nationality)
})
.ToList() // do this to force the projection
.Select(e => new EmployeeLeatestProfileModel
{
EmployeeId = e.Employee.EmployeeId,
EmpNum = e.Employee.EmpNum,
LastUpdatedProfile = e.EmployeeProfiles
.Where(p => p.EmployeeId == e.Employee.EmployeeId)
.OrderByDescending(a => a.UpdateDatetime)
.Take(1)
})
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.