C# 从模型中的多个列表中选择并将其放入下拉列表中

C# 从模型中的多个列表中选择并将其放入下拉列表中,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我正试图通过这样做来填充我的dropdownlist var componentList = (from c in model.Components select new { compID = c.ID, compN

我正试图通过这样做来填充我的dropdownlist

  var componentList = (from c in model.Components
                                 select new
                                 {
                                     compID = c.ID,
                                     compName = c.CompID + ":" + c.ComponentName
                                 }).OrderBy(x => x.compName).ToList();
                      (from sc in model.ComponentSubComps
                                select new
                                {
                                     compID = sc.ID,
                                     compName = sc.SubCompID + ":" + sc.SubCompName
                                }).OrderBy(x => x.compName).ToList();

  ViewBag.Components = new SelectList(componentList, "compID", "compName");

但它只是从模型中的
model.Components
列表中提取数据。如何使它也从
model.components子组件列表中提取呢?

您有两条语句。存储在
componentList
中的第一条语句的结果,但第二条语句的结果不存储在任何位置

尝试将第二州结果添加到
组件列表

可能
List.AddRange(IEnumerable)
是最好的选择

编辑:


您可以使用实体编写查询并获取:

var componentList = model.Components.Select(c => new Components
{
    compID = c.ID,
    compName = c.CompID + ":" + c.ComponentName
}).OrderBy(x => x.compName).ToList();

var componentList1 = model.ComponentSubComps.Select(c => new Components
{
    compID = c.ID,
    compName = c.SubCompID + ":" + c.SubCompName
}).OrderBy(x => x.compName).ToList();

componentList.AddRange(componentList1);
ViewBag.Components = new SelectList(componentList, "compID", "compName");

我不知道你是否想要组合组件和子组件。如果它们位于数据库中的单独表中,并且主键只是增量整数值,那么将它们组合在一起可能会导致混淆ID

如果不首先处理,这将成为一个严重的错误。如果它们的ID可能相同,您可能需要使用两个下拉列表(一个用于组件,一个用于子组件),而不是一个

如果必须将两者结合起来,听起来您几乎必须将某些东西与ID唯一地结合起来,将它们分配为不同的组,并在收到回帖时解析ID:

//定义组
var componentGroup=new SelectListGroup{Name=“Component”};
var subComponentGroup=new SelectListGroup{Name=“SubComponent”};
var componentOptions=model.Components
.OrderBy(x=>x.ComponentName)
.选择(x=>new SelectListItem
{
Value=“c:”+x.CompID,
Text=x.CompID+“:”+x.ComponentName,
组=组件组
});
var subComponentOptions=模型.ComponentSubComponents
.OrderBy(x=>x.SubCompName)
.选择(x=>new SelectListItem
{
Value=“sc:+x.子compid,
Text=x.SubCompID+“:”+x.SubCompName,
组=子组件组
});
var dropdownpoptions=新列表();
AddRange(componentOptions);
dropdownOptions.AddRange(子组件);
然后,当用户做出选择并将下拉值发布回服务器时,您可能必须解析所选的下拉值,并查看ID是否属于组件或子组件


如果零部件和子零部件之间没有区别,则可以尽可能轻松地组合它们:

var componentOptions=model.Components
.OrderBy(x=>x.ComponentName)
.选择(x=>new SelectListItem
{
值=x.CompID,
Text=x.CompID+“:”+x.ComponentName
});
var subComponentOptions=模型.ComponentSubComponents
.OrderBy(x=>x.SubCompName)
.选择(x=>new SelectListItem
{
值=x.SubCompID,
Text=x.SubCompID+“:”+x.SubCompName
});
//这是您的选择列表。我强烈建议您构建一个强类型
//查看模型并使用它而不是ViewBag。
var dropdownpoptions=新列表();
AddRange(componentOptions);
dropdownOptions.AddRange(子组件);

如何将两个列表相加?将第二条语句的结果存储在另一个变量中(例如secondStatementResult)。然后
componentList.AddRange(secondStatementResult)
在构建选择列表时,为什么还需要那么多信息,哪一个只能接受一个键和一个值?因为组件列表和子组件列表@davidliangs中有不同的组件,所以要组合组件和子组件列表并创建它们的选择列表?组件和子组件之间没有区别。它们只是我模型中的列表。例如,组件可以有“子组件”,但实际上只是组件有组件。解释起来有点混乱。但我明白你可能担心什么
var componentList = model.Components.Select(c => new Components
{
    compID = c.ID,
    compName = c.CompID + ":" + c.ComponentName
}).OrderBy(x => x.compName).ToList();

var componentList1 = model.ComponentSubComps.Select(c => new Components
{
    compID = c.ID,
    compName = c.SubCompID + ":" + c.SubCompName
}).OrderBy(x => x.compName).ToList();

componentList.AddRange(componentList1);
ViewBag.Components = new SelectList(componentList, "compID", "compName");