Any*_*are 5 c# linq asp.net collections list
如果我有这样的日期列表:
List<DateTime> {5-10-2014,6-10-2014,7-10-2014}
Run Code Online (Sandbox Code Playgroud)
我有这样的会话列表:
List<int> {1,2,3,4,5,6}
Run Code Online (Sandbox Code Playgroud)
考虑到每个日期按顺序有两个会话,如何将会话映射到日期(使用 linq)。
我想要这样的结果:
5-10-2014 1
5-10-2014 2
6-10-2014 3
6-10-2014 4
7-10-2014 5
7-10-2014 6
Run Code Online (Sandbox Code Playgroud)
这是一个简单的解决方案:
dates是一个列表DateTime,sessions 是一个列表int。
var result = sessions.Select((session,i) =>
new{Session = session, Date = dates[i/2]});
Run Code Online (Sandbox Code Playgroud)
结果包含一个匿名对象的 IEnumerable ,您可以像这样访问它的属性:
foreach(var sessionDate in result)
{
var date = sessionDate.Date;
var session = sessionDate.Session.
}
Run Code Online (Sandbox Code Playgroud)
这是您可以使用的一种方法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);
Run Code Online (Sandbox Code Playgroud)
示例: https: //dotnetfiddle.net/2IIKhj
这是它的工作原理:
GroupJoin那个带有数字列表的集合。要将两者关联起来,请使用Index我们从步骤 1 中获得的日期,并且(num - 1) / 2,因为Index是从零开始的。SelectMany压平序列。