【问题标题】:Combining 3 list into 1 LINQ Query C#将 3 个列表组合成 1 个 LINQ 查询 C#
【发布时间】:2021-11-12 16:54:32
【问题描述】:

我是编程新手,我想知道是否可以将索引上的 3 个不同表加入到一个查询结果中。或者,如果不能使用 LINQ 加入,我可以创建一个由 3 个列表的数据组成的新列表。

(Ps. 列表的内容将由用户输入,项目的数量可以非常频繁地运行,但列表中的项目数量将始终相同)

这些是 3 个列表:

List<string> SelfStudyModuleName = new List<string>();

public List<double> SelfStudySesionHours = new List<double>();
public List<DateTime> SelfStudySesiondate = new List<DateTime>();

每个列表的样本数据:

SelfStudyModuleName.Add("Prog");
SelfStudyModuleName.Add("Cloud");
SelfStudyModuleName.Add("Database");
SelfStudyModuleName.Add("Geo");

SelfStudySesionHours.Add(2);
SelfStudySesionHours.Add(5);
SelfStudySesionHours.Add(3);
SelfStudySesionHours.Add(6);

SelfStudySesiondate[0]=2021/12/01;
SelfStudySesiondate[1]=2021/12/02;
SelfStudySesiondate[2]=2021/12/03;
SelfStudySesiondate[3]=2021/12/04;

期望结果的样本:

2021/12/01  Prog       2
2021/12/02  Cloud      5
2021/12/03  DataBase   3
2021/12/04  Geo        6

【问题讨论】:

    标签: c# list linq c#-4.0 linq-to-entities


    【解决方案1】:

    如果您不想开设其他课程,您可以这样做。否则请参阅@Serge 的回答

            var SelfStudyModuleName = new List<string>();
            var SelfStudySesionHours = new List<double>();
    
            var SelfStudySesiondate = new List<DateTime>();
            SelfStudyModuleName.Add("Prog");
            SelfStudyModuleName.Add("Cloud");
            SelfStudyModuleName.Add("Database");
            SelfStudyModuleName.Add("Geo");
    
            SelfStudySesionHours.Add(2);
            SelfStudySesionHours.Add(5);
            SelfStudySesionHours.Add(3);
            SelfStudySesionHours.Add(6);
    
            SelfStudySesiondate[0] = new DateTime(2021, 12, 1);
            SelfStudySesiondate[1] = new DateTime(2021, 12, 2);
            SelfStudySesiondate[2] = new DateTime(2021, 12, 3);
            SelfStudySesiondate[3] = new DateTime(2021, 12, 4);
            var combined = new List<(string Name, double Hours, DateTime Date)>();
            for (int i = 0; i < SelfStudyModuleName.Count; i++)
            {
                combined[i] = ( Name: SelfStudyModuleName[i], Hours: SelfStudySesionHours[i], Date: SelfStudySesiondate[i] );
            }
    

    【讨论】:

      【解决方案2】:

      试试这个

      var result = new List<SelfStudy>();
      
          for (var i = 0; i < SelfStudyModuleName.Count; i++)
          {
              result.Add(new SelfStudy
              {
                  SelfStudyModuleName = SelfStudyModuleName[i],
                  SelfStudySesionHours = SelfStudySesionHours[i],
                  SelfStudySesiondate = SelfStudySesiondate[i]
              });
          }
      }
      

      public class SelfStudy
      {
          public DateTime SelfStudySesiondate { get; set; }
          public string SelfStudyModuleName { get; set; }
          public double SelfStudySesionHours { get; set; }
          
      }
      

      并为您的初始化添加 SelfStudySesiondate0

      public string[] SelfStudySesiondate0 = new string[4];
      
          SelfStudySesiondate0[0] = "2021 / 12 / 01";
          SelfStudySesiondate0[1] = "2021 / 12 / 02";
          SelfStudySesiondate0[2] = "2021 / 12 / 03";
          SelfStudySesiondate0[3] = "2021 / 12 / 04";
          
          SelfStudySesiondate=SelfStudySesiondate0.Select(i=> Convert.ToDateTime( i)).ToList();
      

      【讨论】:

      • 非常感谢这对您有很大帮助。
      • @DominiqueParkin 不客气!
      【解决方案3】:

      元组 也可能有帮助。 如果您想避免使用类,请改用这个类。 var 结果 = 新元组();

      for (var i = 0; i < SelfStudyModuleName.Count; i++)
      {
          result.Add(new SelfStudy
          {
              SelfStudyModuleName[i],SelfStudySesionHours[i],SelfStudySesiondate[i]
          });
      }
      

      }

      【讨论】:

        【解决方案4】:

        LINQ Zip 运算符可能是您正在寻找的:

        var results = SelfStudyModuleName.Zip(SelfStudySesionHours, (moduleName, sessionHours) => new { moduleName, sessionHours })
            .Zip(SelfStudySesiondate, (e, date) => new { e.moduleName, e.sessionHours, date});
        

        虽然如果您有能力对源进行索引(就像使用 List/Array 一样),您也可以这样做:

        var results2 = SelfStudyModuleName
            .Select((moduleName, i) => new {
                moduleName, 
                sessionHours = SelfStudySesionHours[i], 
                date = SelfStudySesiondate[i]
            });
        

        LINQPad Example

        【讨论】:

        • 非常感谢您的帮助,这也很有效,但其他答案在我的程序中效果更好。
        猜你喜欢
        • 2020-12-24
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        相关资源
        最近更新 更多