c# - 如何使用 linq 映射两个列表

标签 c# asp.net linq list collections

如果我有这样的日期列表:

List<DateTime>  {5-10-2014,6-10-2014,7-10-2014}

我有这样的 session 列表:

List<int>  {1,2,3,4,5,6}

考虑到每个日期按顺序有两个 session (使用 linq),如何将 session 映射到日期。


我想要这样的结果:

5-10-2014    1
5-10-2014    2
6-10-2014    3
6-10-2014    4
7-10-2014    5
7-10-2014    6

最佳答案

这是您可以使用 GroupJoin 实现的一种方法:

var groupedDates = dates
    .Select((date, index) => new { Date = date, Index = index })
    .GroupJoin(
        numbers,
        dateWithIndex => dateWithIndex.Index,
        num => (num - 1) / 2,
        (dateWithIndex, nums) => new[] 
        { 
            new { Date = dateWithIndex.Date, Number = nums.First() },
            new { Date = dateWithIndex.Date, Number = nums.Last() }
        })
    .SelectMany(grp => grp);

示例: https://dotnetfiddle.net/2IIKhj

这是它的工作原理:

  1. 将日期列表投影到包含每个日期的索引和日期本身的新序列中
  2. GroupJoin 带有数字列表的集合。要将两者相关联,请使用我们从步骤 1 中获得的 Index 作为日期,并使用 (num - 1)/2,因为 Index 是零基础。
  3. 要构建结果,请创建一个包含两项的新数组,一项对应与日期关联的每个数字。
  4. 最后,调用SelectMany 来展平序列。

关于c# - 如何使用 linq 映射两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425728/

相关文章:

c# - 如何通过复选框启用和禁用 DataGridView 中的特定行?

c# - 将字典转换为两个列表的最佳方法

c# - 如何添加到 Visual Studio 错误列表窗口中的消息列表?

c# - 为 ASP.NET 中继器中的 LinkBut​​ton 设置额外属性

asp.net - "Disable managed optimizations and restart debugging"在 Visual Studio 中实际更改了哪些设置?

c# - LINQ 查询对象列表以获取基于多个字段的分布

c# - Linq To Entities 内部转换

c# - ExportAsFixedFormat 中的 NumberFormat 问题

asp.net - 在 AJAX 请求期间更改响应时出现 PageRequestManagerParserErrorException

c# - VB.NET 问题。林克支持?