如何使用Linq在结构下面展平?
我正在查看以下结果:
Date Ids
1/1/2011 1
1/1/2011 2
1/1/2011 3
1/1/2012 3
etc..
我尝试过SelectMany,但我做错了。这个例子的一些片段:
public class DTO
{
public DateTime Date { get; set; }
public List<int> Ids { get; set; }
}
作为
var dataSet = new List<DTO>{
new DTO {Date = new DateTime(2011,1,1), Ids = new List<int>{1,2,3} },
new DTO {Date = new DateTime(2012,1,1), Ids = new List<int>{3,4,5} },
new DTO {Date = new DateTime(2013,1,1), Ids = new List<int>{5,6,7} }
};
答案 0 :(得分:2)
selectmany应位于DTO内的列表中,但同时保留对日期的引用。这可能是主要问题。通过使用查询语法,这些结构更容易:
var res = (from s in dataSet
from id in s.Ids
select new {Date=s.Date, Id = id}).ToList();
答案 1 :(得分:0)
这是使用SelectMany的另一种解决方案
var results = dataSet.Select(x => new
{
dto = x.Ids.Select(y => new
{
date = x.Date,
id = y
})
}).SelectMany(x => x.dto).ToList();