收集钥匙收集物品Linq的集合

时间:2017-05-08 11:19:25

标签: c# linq

如何使用Linq在结构下面展平?

enter image description here

我正在查看以下结果:

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} }
    };

2 个答案:

答案 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();