2017-10-17 66 views
0

需要在c#中使用實體框架進行查詢的幫助。通過過濾來自行的條件查詢表

我有一個高級搜索頁面,我可以從複選框列表中選擇多個選項。這些選定的選項應該從一個表格中篩選出來,每個選項都作爲一個值。

這是我的表的快照。

enter image description here

從這個表,我選擇的選項如下:

enter image description here

如果我選擇比他們多了一個,我需要檢索的數據,適用於所有檢查的值。即我應該對所選值應用「AND」條件以獲得具有所有選定值的員工。下面的代碼不會將過濾器應用爲「AND」操作,因爲我將每個項目單獨與行列表進行比較。

foreach (var item in UIFilter.SecurityOptions) 
       { 
        securityOverrideList.AddRange(
         secureDbContext. 
         SecurityOverride. 
         Where(p => p.SECURITY_ROLE_CD.Equals(item)). 
         Select(p => p.EMPL_ID)); 
       } 

有人建議我的方式,我沒有獲得現在就創建我的數據庫程序在C#中做到這一點。

+0

爲什麼你需要一個'foreach'循環? – Rahul

回答

0

難道你可能嘗試以下方法:

var potentialEmployees = secureDbContext.SecurityOverride.Where(a => UIFilter.SecurityOptions.Contains(a.SECURITY_ROLE_CD)); 
var securityOverrideList = potentialEmployees.Select(x => x.EMPL_ID).Distinct(); 
foreach (var item in UIFilter.SecurityOptions) 
{ 
    var subsetEmployeeIds = potentialEmployees.Where(a => a.SECURITY_ROLE_CD == item).Select(x => x.EMPL_ID); 
    securityOverrideList = securityOverrideList.Where(a => subsetEmployeeIds.Contains(a)); 
} 

在你的結構來看,就沒有單列,將滿足所有選定的角色。因此,我們需要獲得所有潛在的employeeId(假設這是您正在查找的內容,因爲您僅預測員工ID)。

接下來,我們再次遍歷每個安全角色,以確保securityOverrideList變得更小,因爲它需要滿足所有這些條件。