[英]using Join with entity framework object query. Navigation property still shows all the entities of the joined entity
[英]Filter related entities or navigation property where there is a join table in Entity Framework 6
我有三個實體Role
, RoleUser
和User
我想選擇每個強制Role
並加載相關的User
,其中連接表中的RoleUser.RecordID
等於給定值。
使用 UOW 和 GenericReposiity Get(...)
方法我會調用...
.Get(role => role.Compulsory == true, null, "RoleUser.User")
選擇所有強制角色並加載導航RoleUser.User
所有User
。
如何過濾它們,是否可以使用實現的Get()
方法?
實體
public class Role
{
public int RoleID { get; set; }
public bool Compulsory { get; set; }
public virtual IList<RoleUser> RoleUser { get; set; }
}
public class RoleUser
{
public string UserID { get; set; }
public virtual User User { get; set; }
public Guid RecordID { get; set; }
public virtual Record Record { get; set; }
public int RoleID { get; set; }
public virtual Role Role { get; set; }
}
public class User
{
public string userID { get; set; }
}
得到
public virtual IList<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
不,您不能從此 Get 方法過濾
RoleUser
。 如果要過濾RoleUser
將它們投影到另一個列表中。您可以根據
RoleUser
表過濾您的Role
。除非您使用 IQerable Projection,Include 將始終在表中顯示完整數據。
var rolesWithAnyUserName = UnitOfWork.Role
.Get(role => role.Compulsory == true && role.RoleUser
.Any(g=>g.RoleUserName=="Name"), null, "RoleUser.User")
這只會根據RoleUser
過濾器過濾Role
如果您需要過濾Include
表,請編寫查詢,您可以將IQuerable
發送到數據庫
嘗試這樣的事情,這將過濾Role
和RoleUser
var result = DataContext.Role.Where(role => role.Compulsory == true )
.Include(gl => gl.RoleUser)
.Select(x => new
{
role = x,
roleUsers= x.RoleUser.Where(g => g.Id == 1),
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.