2014-02-28 103 views
0

我試圖建立一個linq查詢,以獲取所有模塊的每個模塊的形式取決於當前用戶的權利,所以我可以建立我的程序菜單上的用戶日誌上。實體框架上的複雜Linq查詢

什麼是從以下數據庫結構中獲得單個linq查詢結果的最有效方法? the following database structure? 因此,我可以做的查詢結果如下:

foreach (var module in PermittedModuls) 
{ 
    //do some stuff 
    ..... 


    foreach(var form in module.Forms) 
    { 
    //do some stuff 
    ..... 
    } 
} 

我已經得到了一些「髒」的解決方案,得到它,但我敢肯定有更好的方法來做到這一點。

順便說一句,我使用實體框架6

編輯!!!:對不起球員,我想我的問題不明確。

我只拿到了用戶有權限的表單!!!

+0

你說你有幾個骯髒的解決方案。顯示這些,以便我們可以提供改進。 –

+0

而不是顯示您的數據庫模型,顯示您的EF模型 – James

回答

1

不知道你是如何計劃篩選數據的詳細信息,可以簡化您的代碼

var forms = PermittedModules.SelectMany(x => x.Forms); 

這會給你所有形式的每一個模塊上(假設這是你想要的)。

+0

這不允許他爲'PermittedModuls'中的每個項目執行某些操作,這是他需求的一部分。 – Servy

+0

@Servy它在哪裏說的? OP詢問*「我正在嘗試構建一個linq查詢,以便根據當前用戶的權限獲取所有具有每個模塊的Forms的Modules ......什麼是在單個LINQ中獲得結果的最有效方法查詢「*。 – James

+0

這樣他就可以完成他在給定的代碼片段中描述的內容。他已經表明,除了獲取表單外,他還在用'module'做一些事情。你的代碼不允許這樣做。 – Servy

0

目前,你的代碼基本上你想要做什麼,只是要表明Forms應該急切地填充每個項目,當你執行原來的查詢,而不是懶洋洋地進行N往返得到每個模塊的表格數據。要做到這一點,你使用Include

foreach (var module in PermittedModuls.Include(m => m.Forms)) 
{ 
    //do some stuff 

    foreach(var form in module.Forms) 
    { 
    //do some stuff 
    } 
} 
+0

包含不是問題,我只想獲取允許用戶看到的表單,具體取決於他的權限 – user3041845

+0

@ user3041845因此,您要說的是,您所問的問題與您的問題無關想?你的問題根本沒有提及任何有關權限的問題。 – Servy

+1

@Seivy **取決於當前用戶的權限** – user3041845