查看此檔案,我可以看到您可以使用以下語法加載多個導航物體:
using (var context = new DbContext())
{
var userDocs = context.UserDocuments
.Include(userDoc => userDoc.Role.User)
.ToList();
}
這會給我Role和User我的物件掛起的導航屬性UserDocument,但是如果我想使用包含的字串多載,我該如何構造代碼來處理多個包含?
這不起作用:
return await ctx.UserDocuments.Where(x => x.UserId == userId)
.Include("Role.User").ToList();
我正在嘗試這樣做,因為我的方法可能需要根據呼叫代碼回傳一些、全部或不回傳導航屬性。我的意圖是向存盤庫方法添加一個字串陣列,該方法將相應地構建任何所需的導航屬性。如果這是錯誤的方法,是否有人有其他建議,我想知道延遲加載是否會是一個更優雅的解決方案......?
編輯
這是模型:
public partial class UserDocument
{
public int Id { get; set; }
public Guid UserId { get; set; }
public int RoleId { get; set; }
public int AccountId { get; set; }
public virtual Role Role { get; set; } = null!;
public virtual User User { get; set; } = null!;
}
uj5u.com熱心網友回復:
如果您使用該Include(String)方法,則不需要包含 lambda 來指定屬性路徑。
與其做.Include(x => "Role.User"),不如試試.Include("Role.User")
uj5u.com熱心網友回復:
首先,你必須告訴我們什么是“Role.User”?如果我們不確切知道您寫的內容,我們將無法回答您。
所以,現在我們知道你可以做這兩個不同的物體
var userDocs = await context.UserDocuments
.Include(x => x.Role)
.ThenInclude(x => x.User)
.ToListAsync();
我希望這個對你有幫助。:)
uj5u.com熱心網友回復:
我想你正在尋找這樣的東西:
public async Task<List<UserDocument>> MyMethod(List<string> propertiesToInclude)
{
IQueryable<UserDocument> currentQuery = _context.UserDocuments.Where(x => x.UserId == userId);
foreach(var property in propertiesToInclude)
{
currentQuery = currentQuery.Include(property);
}
return await currentQuery.ToListAsync();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457459.html
上一篇:將影像放置在按鈕中但不顯示影像
