2016-12-06 38 views
1

值:EF讓我的DAL層上,我有以下的一個.INCLUDE

public List<customer> SelectAll() 
    { 
     using (ubmmsEntities db = new ubmmsEntities()) 
     { 
      var result = db.customers 
         .Include(p => p.project_codes) 
         .OrderBy(c=>c.customer_name) 
         .ToList(); 
      return result; 

     } 
    } 

這基本上回到我的客戶名單和各自的項目代碼。隨着返回列表填寫我的視圖下拉列表:

 dropdown.DisplayMember = "customer_name"; 
     dropdown.ValueMember = "id"; 
     dropdown.DataSource = list; 

這部分工作正常。但我有一個第二個下拉這是指從客戶下拉

下面一塊代碼過濾器的,我需要在第二個下拉結果顯示基於所選擇的「CUSTOMER_NAME」項目代碼:

var projects = list.Where(x => x.id.Equals(ddlCustomer.SelectedValue)).ToList(); 

因此,projects返回我的對象​​,具有計數= 1。在執行中,如果我鼠標移到我得到[0] {System.Data.Entity.DynamicProxies....} 向下鑽取了,我得到了項目代碼(計數)的列表。如果我深入,我再次得到實際的名單,從include的信息按計劃進行。到現在爲止還挺好。

的問題是,我現在知道如何訪問它們,以便有添加到我的項目的項目代碼降了下來。

我試圖設置dropproject.DisplayMember = "project_name"(這是什麼,我試圖去),但所有我能得到的是對象類型{System.Data.Entity.DynamicProxies....}而不是其真實會員的價值。

現在,我知道我可以在我的DAL上創建一個方法,根據從下拉列表中選擇的客戶文本訪問我的項目代碼,並快速排序,但由於我知道我有一個已經包含我的對象客戶,他們的ID和項目代碼,我想學一種方式來獲得存儲在我的project_codes表我project_names。

這可能是未來的問題的解決方案,或者......瞭解爲什麼我不應該這樣做(我能想到的一些場景哪裏會導致性能問題)

讓我知道,如果這個問題,信息足夠,任何幫助表示讚賞?

回答

1

查詢更改爲以下:

var projectCodes = list.Where(x => x.id.Equals(ddlCustomer.SelectedValue)) 
         .Select(x => x.project_codes) 
         .FirstOrDefault(); 

這會給你所選擇的客戶的產品代碼。通過這個清單,你可以查詢項目:

var projects = db.projects.Where(p => projectCodes.Contains(p.code)).ToList(); 

(我假定一些名字,但這應該讓你有)

+0

其實,我只是需要您的解決方案的第一部分。設置將DisplayMember和ValuesMembers和數據源,以projectCodes都爲我提供我降的項目代碼名稱下來。 –

2

既然你加載客戶包括項目,你不需要使用查詢獲得客戶的項目。這足以使用你的客戶(或什麼都複雜屬性是一樣project_codes)的Projects屬性:

var customer = (Customer)(customerComboBox.SelectetItem); 
if(customer!=null) 
{ 
    var projects = customer.Projects.ToList(); 
    //. . . 
} 
+0

我錯過了澄清信息。訪問數據庫的方法位於DAL層中,並返回一個List。下拉列表位於視圖上,而我無法訪問這些屬性,這就是爲什麼我正在嘗試使用該列表。 –

+0

使用'Customer'的'Projects'屬性有什麼問題?你有一個'Customer'對象,它有一個'Projects'屬性,它包含了客戶的項目列表。你能描述它是如何破壞規則的嗎?或者它如何與DAL相關?我只是從組合框中獲得客戶,我知道它也包含項目並使用它們。該代碼僅與UI層相關。 –

+0

奇怪你爲什麼想要在選擇的客戶對象中存在項目時使用linq查詢!其他答案的第一部分只是獲得我所描述的一種不好的方式! –

相關問題