Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何合并两个不同对象的列表?_C#_Linq - Fatal编程技术网

C# 如何合并两个不同对象的列表?

C# 如何合并两个不同对象的列表?,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

使用C#with LINQ,如何合并两个不同对象的列表,例如研讨会和会议? 它们具有一些公共和一些不同的字段/属性,并且不共享唯一的id

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;iFirstName=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();
    }