我的DAL图层上有以下内容:
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;
}
}
基本上,这会向我返回客户列表及其各自的项目代码。使用返回的List,我在View上填写一个下拉列表:
dropdown.DisplayMember = "customer_name";
dropdown.ValueMember = "id";
dropdown.DataSource = list;
这部分工作正常。但我有第二个下拉列表,用于根据客户下拉列表中选定的“customer_name”显示项目代码
下面的代码过滤了第二个下拉列表所需的结果:
var projects = list.Where(x => x.id.Equals(ddlCustomer.SelectedValue)).ToList();
所以,projects
返回一个count = 1的对象。在执行中,如果我将鼠标移到我身上,我会[0] {System.Data.Entity.DynamicProxies....}
向下钻取,我得到一个项目代码列表(计数)。如果我再次向下钻取,我将按计划获得include
中的信息的实际列表。到目前为止一切都很好。
问题是我现在知道如何访问它们以便将项目代码添加到我的项目中。
我尝试设置dropproject.DisplayMember = "project_name"
(这是我想要的),但我能得到的只是对象类型{System.Data.Entity.DynamicProxies....}
,而不是其实际成员的值。< / p>
现在,我知道我可以在DAL上创建一个方法,根据下拉列表中选定的客户文本访问我的项目代码并快速排序,但因为我知道我有一个已包含我的客户的对象,他们的ID和项目代码,我想学习一种方法来将project_names存储在我的project_codes表中。
它可能是未来问题的解决方案......或者可能知道为什么我不应该这样做(我可以想到一些会导致性能问题的场景)
如果问题和信息足够,请告诉我,是否有任何帮助?
答案 0 :(得分:2)
由于您加载了包括项目在内的客户,因此您无需使用查询来获取客户的项目。它足以使用客户的Projects
属性(或者它的复杂属性,如project_codes):
var customer = (Customer)(customerComboBox.SelectetItem);
if(customer!=null)
{
var projects = customer.Projects.ToList();
//. . .
}
答案 1 :(得分: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();
(我假设了一些名字,但这应该让你到那里)