2017-10-06 130 views
1

我有一個數據庫,它的架構如下:過濾兒童實體框架查詢

Database Schema

正如你可以看到,我們有WareCategories這將是商品我要去的類別在我的網站上工作。 WareTypes這將是每個項目類型的定義。類別定義表中的屬性WarePropertyDefinitionsWareProperties定義了在WarePropertyDefinitions表中定義的每個屬性的值。

現在我有用戶在OldWares和用戶搜索項的搜索頁面,選擇類別和我顯示用戶在WarePropertyDefinitions,如果他喜歡更好的結果用戶填寫的數據定義的所有屬性。但我的問題是,我不能過濾WareTypes基於WareProperties,因爲它是從ICollection我無法訪問過濾器選項。

我該如何應用這種基於屬性的過濾?

在此先感謝...

編輯:

這是我獻給描述更多的代碼的一部分:

var lst = WareCategory.GetItem(Convert.ToInt32(ddlChildren.SelectedValue)).WarePropertyDefinitions.ToList(); 
       foreach (var ListItem in lst) 
       { 
         var value = BaseHelper.FindFormValue("PropertyValue" + ListItem.Id.ToString()); 
         if (!string.IsNullOrEmpty(value)) 
         { 
          query = query.Where(m => m.WareType.WareProperties.); 
         } 
        } 
       } 

的代碼這部分是我的搜索功能,你可以看到我要生成WarePropertyDefinition中的項目列表,該用戶通過名爲ddlChildren的下拉菜單選擇。我將在此定義中進行迭代,併爲每個屬性輸入用戶值(變量將保存用戶輸入的值,並且我將檢查用戶是否在文本框中輸入了任何內容),我會將其包含在(通過這我將它添加到where子句中,最終過濾我的選擇)。但正如你所看到的代碼是不完整的,因爲我不知道如何完成它。

+0

向您的問題添加一些代碼會讓我們更加了解這個問題。 –

+0

我編輯了我的代碼,如果您需要更多我的代碼,我會很樂意提供更多,但我認爲這部分代碼就足夠了。在此先感謝 –

+0

所以你想找到WareTypes的地方有價值的WareTypes? –

回答

2

使用任何()擴展方法,例如:

query = query.Where(m => m.WareType.WareProperties.Any(wp => wp.Id == 5)); 
+0

我解決了這個問題:query = query.Where(m => m.WareType.WareProperties.Any(wp => wp.WarePropertyDefinition_Id == ListItem.Id && wp.TextValue == value)); –

+0

很高興爲你工作:D – user3159792

0

我已經通過這個代碼固定我的問題:

query = query.Where(m => m.WareType.WareProperties.Any(wp => wp.WarePropertyDefinition_Id == ListItem.Id && wp.TextValue == value)); 

但由於@ user3159792的回答是我的問題的基本我選擇了他的答案作爲我的問題的默認答案。很感謝。