C# 如何合并两个不同对象的列表?
使用C#with LINQ,如何合并两个不同对象的列表,例如研讨会和会议? 它们具有一些公共和一些不同的字段/属性,并且不共享唯一的idC# 如何合并两个不同对象的列表?,c#,linq,C#,Linq,使用C#with LINQ,如何合并两个不同对象的列表,例如研讨会和会议? 它们具有一些公共和一些不同的字段/属性,并且不共享唯一的id class Seminar { int id, DateTime joinDate, string name } class Conference { Guid confNumber, DateTime joinDate Type type } 我有一份清单: List<Seminar> List<Co
class Seminar
{
int id,
DateTime joinDate,
string name
}
class Conference
{
Guid confNumber,
DateTime joinDate
Type type
}
我有一份清单:
List<Seminar>
List<Conference>
一段代码片段会很有帮助。如果这是您对合并的定义,下面的代码对我来说很好 一个解决方案
List<A> someAs = new List<A>() { new A(), new A() };
List<B> someBs = new List<B>() { new B(), new B { something = new A() } };
List<Object> allS = (from x in someAs select (Object)x).ToList();
allS.AddRange((from x in someBs select (Object)x).ToList());
List<A> someAs = new List<A>() { new A(), new A() };
List<B> someBs = new List<B>() { new B(), new B { something = string.Empty } };
List<Object> allS = (from x in someAs select (Object)new { someAnotherThing = x.someAnotherThing, something = string.Empty }).ToList();
allS.AddRange((from x in someBs select (Object)new { someAnotherThing = string.Empty, something = x.something}).ToList());
另一种解决方案
List<A> someAs = new List<A>() { new A(), new A() };
List<B> someBs = new List<B>() { new B(), new B { something = new A() } };
List<Object> allS = (from x in someAs select (Object)x).ToList();
allS.AddRange((from x in someBs select (Object)x).ToList());
List<A> someAs = new List<A>() { new A(), new A() };
List<B> someBs = new List<B>() { new B(), new B { something = string.Empty } };
List<Object> allS = (from x in someAs select (Object)new { someAnotherThing = x.someAnotherThing, something = string.Empty }).ToList();
allS.AddRange((from x in someBs select (Object)new { someAnotherThing = string.Empty, something = x.something}).ToList());
如果您只需要一个包含两个列表中所有对象的
列表
,这相当简单:
List<object> objectList = seminarList.Cast<object>()
.Concat(conferenceList)
.ToList();
List objectList=seminarList.Cast()
康卡特先生(会议名单)
.ToList();
如果这不是您想要的,那么您需要定义“合并”的含义。纯代码的简单方法
internal class Person
{
public int Id { get; set; }
public string UserName { get; set; }
}
internal class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
internal class UserPerson
{
public int Id { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
private static void Main(string[] args)
{
Person[] people = new Person[3] { new Person { Id = 1, UserName = "AliUserName" }, new Person { Id = 2, UserName = "MortezaUserName" }, new Person { Id = 3, UserName = "SalarUserName" } };
User[] users = new User[4] { new User { FirstName = "ali", LastName = "Barzegari" }, new User { FirstName = "Morteza", LastName = "Sefidi" }, new User { FirstName = "Salar", LastName = "Pirzadeh" }, new User { FirstName = "Babak", LastName = "Hasani" } };
UserPerson[] userPeople = new UserPerson[people.Length > users.Length ? people.Length : users.Length];
if (people.Length > users.Length)
for (int i = 0; i < people.Length; i++)
{
userPeople[i] = new UserPerson
{
Id = people[i].Id,
UserName = people[i].UserName,
FirstName = users.Length <= i ? "" : users[i].FirstName,
LastName = users.Length <= i ? "" : users[i].LastName
};
}
else
for (int i = 0; i < users.Length; i++)
{
userPeople[i] = new UserPerson
{
Id = people.Length <= i ? 0 : people[i].Id,
UserName = people.Length <= i ? "" : people[i].UserName,
FirstName = users[i].FirstName,
LastName = users[i].LastName
};
}
Console.ReadLine();
}
内部类人员
{
公共int Id{get;set;}
公共字符串用户名{get;set;}
}
内部类用户
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
内部类用户
{
公共int Id{get;set;}
公共字符串用户名{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
私有静态void Main(字符串[]args)
{
Person[]people=newperson[3]{newperson{Id=1,UserName=“AliUserName”},newperson{Id=2,UserName=“MortezaUserName”},newperson{Id=3,UserName=“SalarUserName”};
User[]users=new User[4]{new User{FirstName=“ali”,LastName=“Barzegari”},new User{FirstName=“Morteza”,LastName=“Sefidi”},new User{FirstName=“Salar”,LastName=“Pirzadeh”},new User{FirstName=“Babak”,LastName=“Hasani”};
UserPerson[]userPeople=newuserperson[people.Length>users.Length?people.Length:users.Length];
if(people.Length>users.Length)
for(int i=0;i FirstName=users。长度请澄清合并。发布您尝试过的代码也是一个好主意。是的,代码片段肯定会非常有用。您对合并的定义远比我们的定义重要。如果它们具有共同属性,那么理想情况下,它们共享一个有助于合并的接口。您认为如何您想完成什么?为什么要在同一个集合中使用异构对象?我想您有一个设计问题,您只是还没有意识到。@user,非常好。现在请在您的问题中发布此信息(使用链接)。同样,发布您尝试过的代码也会有所帮助,否则在这种复杂程度下,您的问题将被关闭。非常感谢!如何将其转换回原始对象,以便从组合列表(在我的情况下为objectList)中获取Seninar和Conference的属性?我尝试了以下操作:
list combinedList=employee.Seminar.Cast()
.Concat(employee.Conference.ToList();
var TotalPoint=combinedList
.Count(x=>x.Status==Completed
&&x.EndDate@user3410713:您需要创建一个包含需要读取的公共属性的接口。如果两个类都实现该接口,请将.Cast()
更改为.Cast()
,并将列表
替换为列表
;然后您就可以从组合列表中访问公共属性。非常感谢!如何将其转换回原始对象以从组合列表中获取(比方说)Seninar和Conference的属性,在我的情况下,是ALL?我尝试了以下操作:
列表组合列表=employee.Seminar.Cast()
.Concat(employee.Conference.ToList();
var TotalPoint=combinedList
.Count(x=>x.Status==Completed
和&x.EndDate那么另一个解决方案将对您有效,除了形式之外,您还可以使用if(o是研讨会){}else if(o是会议){}
太复杂了,我正在寻找一个更简单的解决方案
internal class Person
{
public int Id { get; set; }
public string UserName { get; set; }
}
internal class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
internal class UserPerson
{
public int Id { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
private static void Main(string[] args)
{
Person[] people = new Person[3] { new Person { Id = 1, UserName = "AliUserName" }, new Person { Id = 2, UserName = "MortezaUserName" }, new Person { Id = 3, UserName = "SalarUserName" } };
User[] users = new User[4] { new User { FirstName = "ali", LastName = "Barzegari" }, new User { FirstName = "Morteza", LastName = "Sefidi" }, new User { FirstName = "Salar", LastName = "Pirzadeh" }, new User { FirstName = "Babak", LastName = "Hasani" } };
UserPerson[] userPeople = new UserPerson[people.Length > users.Length ? people.Length : users.Length];
if (people.Length > users.Length)
for (int i = 0; i < people.Length; i++)
{
userPeople[i] = new UserPerson
{
Id = people[i].Id,
UserName = people[i].UserName,
FirstName = users.Length <= i ? "" : users[i].FirstName,
LastName = users.Length <= i ? "" : users[i].LastName
};
}
else
for (int i = 0; i < users.Length; i++)
{
userPeople[i] = new UserPerson
{
Id = people.Length <= i ? 0 : people[i].Id,
UserName = people.Length <= i ? "" : people[i].UserName,
FirstName = users[i].FirstName,
LastName = users[i].LastName
};
}
Console.ReadLine();
}