日期:2014-05-18  浏览次数:20888 次

请教一个LINQ选择的问题
现有Album和Photo两个对象,一对多,定义如下:
C# code

public class Album {
    public List<Photo> Photos { get; set; }
}

public class Photo {
    public string Name { get; set; }
}


然后创建并关联,
C# code

List<Album> albums = new List<Album>();
albums.Add(new Album {
    Photos = new List<Photo> { 
    new Photo{Name ="Photo1"},
    new Photo{Name ="Photo2"}
}});

albums.Add(new Album {
    Photos = new List<Photo> { 
    new Photo{Name ="Photo3"},
    new Photo{Name ="Photo4"},
    new Photo{Name ="Photo5"}
}
});


如何可以通过LInq来select出来albums中所有Photo,即
var q = ..linq..
q出来就是List<Photo>,然后包括Photo1-5

这个问题如果简化成下面这样,是否一致
C# code

var sample = new List<List<string>>();
sample.Add(new List<string> { "a", "b" });
sample.Add(new List<string> { "c", "d", "e" });



我目前只知道Cocat连接多个List,但如果是多个岂不是要while cocat...

------解决方案--------------------
这样行吗
C# code

            List<Photo> list = new List<Photo>();
            var vs = from p in albums.Select(x => x.Photos) select p;
            foreach (var v in vs)
            {
                list.AddRange((from p in v select p).ToArray());
            }

------解决方案--------------------
一个selectMany操作而已
------解决方案--------------------
linq处理这些很给力啊
SelectMany(x=>x),x后面还可以做很多事,例如只取第一个数据等等
------解决方案--------------------
探讨

C# code
var photolist=albums.SelectMany(x=>x.Photos).ToList();