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# Linq join 3列表<;T>;_C#_Linq_List_Join - Fatal编程技术网

C# Linq join 3列表<;T>;

C# Linq join 3列表<;T>;,c#,linq,list,join,C#,Linq,List,Join,我有三个列表需要合并在一起 class Person { public int PersonID{ get; set; } public string FirstName{get; set;} public string LastName {get; set;} } class Traffic { public DateTime Date{ get; set; } public int PersonID; public int TrafficID

我有三个列表需要合并在一起

class Person
{
    public int PersonID{ get; set; }
    public string FirstName{get; set;}
    public string LastName {get; set;}
}

class Traffic
{
    public DateTime Date{ get; set; }
    public int PersonID;
    public int TrafficID;
}

class TrafficType
{
    public int TrafficID { get; set; }
    public string Description  { get; set; }
}

List<Person> Persons=GetPersons();

List<TrafficType> TrafficTypes=GetTrafficTypes();

List<Traffic> Traffics=GetTraffics();
班级人员
{
公共int PersonID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
班级交通
{
公共日期时间日期{get;set;}
公共国际人格;
公共交通;
}
类流量类型
{
public int-TrafficID{get;set;}
公共字符串说明{get;set;}
}
List Persons=GetPersons();
List TrafficTypes=GetTrafficTypes();
列表流量=GetTraffics();
我需要这样的输出:

PersonID FirstName LastName Date Description 1001 David ... 2011/07/19 sample description PersonID名字姓氏日期描述 1001大卫。。。2011/07/19样本说明
您可以将它们全部放在一个类中,例如(Problem),然后对输出使用一个方法

class Problem
{
   public Problem()
   {

   }

   public void Show()
   {
         // implement your output here
   }

}
或者,如果您正在使用Windows窗体应用程序并在表中交互,则可以使用DataGridView控件。有关它的更多信息,请访问


或者,使用DataGrid:

下面是一个完整的代码示例,其中包含Linq查询表达式代码,该代码应该完全符合您的要求:

using System;
using System.Collections.Generic;
using System.Linq;

class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class Traffic
{
    public DateTime Date { get; set; }
    public int PersonId { get; set; }
    public int TrafficId { get; set; }
}

class TrafficType
{
    public int Id { get; set; }
    public string Description { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var persons = new List<Person>()
        {
            new Person()
            {
                Id = 1001,
                FirstName = "David",
                LastName = "Jones",
            },
        };
        var trafficTypes = new List<TrafficType>()
        {
            new TrafficType()
            {
                Id = 456,
                Description = "sample description",
            },
        };
        var traffics = new List<Traffic>()
        {
            new Traffic()
            {
                PersonId = 1001,
                TrafficId = 456,
                Date = DateTime.Now,
            },
        };

        var joinedData = from p in persons
                         from t in traffics
                         from tt in trafficTypes
                         where p.Id == t.PersonId
                            && tt.Id == t.TrafficId
                         select new
                         {
                             PersonId = p.Id,
                             FirstName = p.FirstName,
                             LastName = p.LastName,
                             // Remove time component, if present
                             Date = t.Date.Date,
                             Description = tt.Description,
                         };

        foreach (var item in joinedData)
        {
            Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}"
                , item.PersonId
                , item.FirstName
                , item.LastName
                , item.Date.ToShortDateString() // Don't print the time
                , item.Description
                );
        }
    }
}

还要注意,
ID
是一个缩写词,而不是首字母缩略词,因此应该写为:
ID
(驼峰大小写)。
var result = Persons.Join(
    Traffics,
    person => person.PersonID,
    trafic => trafic.PersonID,
    (person, trafic) => new
    {
        PersonId = person.PersonID,
        FirstName = person.FirstName,
        LastName = person.LastName,
        Date = trafic.Date,
        TraficId = trafic.TrafficID
    }).Join(
        TrafficTypes,
        a => a.TraficId,
        traficType => traficType.TrafficID,
        (a, traficType) => new
        {
            PersonId = a.PersonId,
            FirstName = a.FirstName,
            LastName = a.LastName,
            Date = a.Date,
            Description = traficType.Description
        });
using System;
using System.Collections.Generic;
using System.Linq;

class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class Traffic
{
    public DateTime Date { get; set; }
    public int PersonId { get; set; }
    public int TrafficId { get; set; }
}

class TrafficType
{
    public int Id { get; set; }
    public string Description { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var persons = new List<Person>()
        {
            new Person()
            {
                Id = 1001,
                FirstName = "David",
                LastName = "Jones",
            },
        };
        var trafficTypes = new List<TrafficType>()
        {
            new TrafficType()
            {
                Id = 456,
                Description = "sample description",
            },
        };
        var traffics = new List<Traffic>()
        {
            new Traffic()
            {
                PersonId = 1001,
                TrafficId = 456,
                Date = DateTime.Now,
            },
        };

        var joinedData = from p in persons
                         from t in traffics
                         from tt in trafficTypes
                         where p.Id == t.PersonId
                            && tt.Id == t.TrafficId
                         select new
                         {
                             PersonId = p.Id,
                             FirstName = p.FirstName,
                             LastName = p.LastName,
                             // Remove time component, if present
                             Date = t.Date.Date,
                             Description = tt.Description,
                         };

        foreach (var item in joinedData)
        {
            Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}"
                , item.PersonId
                , item.FirstName
                , item.LastName
                , item.Date.ToShortDateString() // Don't print the time
                , item.Description
                );
        }
    }
}
1001    David   Jones   7/19/2011       sample description