2012-10-13 145 views
0

我有两个列表。一个人名单和一个组织名单。 我想将这些列表相互添加并创建一个新列表,然后将此列表绑定到DropDownList。 值得注意的是,我想添加另一个属性到这个列表中,当我想从DropDownList中选择一个项目时,它给了我这个项目是Person或Organization。 如何创建此列表?从两个不同的列表创建一个列表

+2

看看Linq的'Zip'函数:http://msdn.microsoft.com/en-us/library/dd267698.aspx –

+1

从创建一个类,它都从(fe' OrgUnit')继承属性'OrgType'。然后你可以使用'List '作为DataSource。 –

+0

你的两个相同类型的列表? – jams

回答

1

重新读你的问题,也许你不应该使用Zip(或者比我将要使用它更好的方法)。

创建一个单独的类,它可以包含两种,有其标记,如果它是一个人或组织,然后建立人的名单:

public class PersonOrganizationEntry 
{ 
    public Person Person { get; private set; } 
    public Organization Organization { get; private set; } 

    public PersonOrganizationType Type { get; private set; } 

    public PersonOrganizationEntry(Person person) 
    { 
     this.Person = person; 
     this.Type = PersonOrganizationType.Person; 
    } 

    public PersonOrganizationEntry(Organization organization) 
    { 
     this.Organization = organization; 
     this.Type = PersonOrganizationType.Organization; 
    } 
} 

public enum PersonOrganizationType 
{ 
    Person, 
    Organization 
} 

然后你列出这种新型合并在一起

var persons = new List<Person>() 
{ 
    new Person(), 
    new Person(), 
    new Person() 
}; 

var organizations = new List<Organization>() 
{ 
    new Organization(), 
    new Organization() 
}; 

var mergedEntries = 
     persons.Select(p => new PersonOrganizationEntry(p)) 
    .Concat(
     organizations.Select(o => new PersonOrganizationEntry(o)) 
    ).ToList(); 

然后,您可以将您的下拉列表绑定到此集合PersonOrganizationEntry。每个“人员”条目将有一个实例分配给条目的Person字段,而Type将为PersonOrganizationType.Person。反之亦然组织。