2015-02-06 43 views
0

我正在一個asp.net mvc web應用程序上工作。和我有以下方法庫,,在那裏我將通過在.include()動態: -調用動態.Include列表

public async Task<SecurityRole> FindSecurityRole(int id,string path="") 
       { 
        return await context.SecurityRoles.Include(path).SingleOrDefaultAsync(a2 => a2.SecurityRoleID == id); 
} 

現在我的控制器內我想打電話給上面的方法如下: -

await uniteofwork.SecurityRoleRepository.FindSecurityRole(id.Value,) 

但我不確定什麼是我可以遵循的apporachies通過屬性? 謝謝

回答

1

通過將結果存儲在一個變量中,您可以將呼叫鏈接到諸如Include之類的內容。在您撥打如SingleOrDefaultAsync這樣的評估表達式之前,沒有任何內容會實際觸及您的數據庫。

var query = context.SecurityRoles; 
foreach (var include in path.Split(',', StringSplitOptions.RemoveEmptyEntries)) 
{ 
    query = query.Include(include); 
} 

return await query.SingleOrDefaultAsync(a2 => a2.SecurityRoleID == id); 

分割字符串允許您一次傳遞多個包含層次結構,以逗號分隔。

+0

謝謝,以及我將如何調用上述方法,我應該將它傳遞給一個字符串「NavigationProperty1,NavigationProperty2」嗎?例如「repository.Call(1,」NP1,NP「」);「 – 2015-02-06 17:19:30

+0

是的,確切地說.include需要一個字符串或lambda表達式。 – 2015-02-06 17:25:49

+0

但我如何在我的情況下通過lamdba表達式?因爲它可以讓我防止硬編碼的導航屬性..但我不知道如何我可以通過導航屬性作爲lambada表達式。 – 2015-02-06 23:25:25