2011-04-05 181 views
2

我想创建供应商的下拉菜单。我在我的数据库中有一个供应商表,其中包含一个VendorID和一个CompanyID。公司表格包含一个CompanyID和一个名称。使用多个表中的数据创建下拉列表

我想有一个下拉菜单项,其中VendorID作为值,公司名称作为文本。但我不知道如何从相关表中获取名称字段以放入下拉菜单,因此我将VendorID作为值和文本。这就是我现在所拥有的。

我传递包含此模型:

public IEnumerable<Vendor> Vendors { get; set; } 

在我的控制,我设置供应商的价值是这样的:

MyDBEntities _entities = new MyDBEntities(); 
Vendors = _entities.Vendors; 

这里是我的下拉列表该页面:

<%= Html.DropDownListFor(m => m.VendorId, new SelectList(Model.Vendors, "VendorID", "VendorID"), "- Select a Vendor -")%> 

我想我可以创建一个自定义函数 - GetVendorsForDropdown - 只会返回我需要的数据,并将我的模型更改为包含IEnumerable<Something>。但我不知道返回类型应该是什么。

回答

3

使用LINQ,并返回它们作为列表项的

MyDBEntities _entities = new MyDBEntities(); 
var data = from v in _entities.Vendors 
      from c in _entities.Companies 
      where v.CompanyId = c.CompanyId 
      select new ListItem{Value = v.VendorId, Text = c.CompanyName}; 

return data; 
+0

什么是做到这一点的最佳途径的集合?我知道的唯一方法是将所有供应商加载到列表中,而不是枚举每个供应商并将其添加到ListItems列表中。似乎不理想。 – Steven 2011-04-05 19:47:06

3

联接表,并返回时listItems

MyDBEntities _entities = new MyDBEntities(); 
var results = from v in _entities.Vendors 
       join c in _entities.Companies on v.CompanyId equals c.CompanyId 
       select new ListItem{Value = v.VendorId, Text = c.Name}; 

return results;