帮助C#LINQ投影

RPM*_*984 3 c# linq linq-to-entities projection .net-4.0

我有一个IQueryable<SomePOCO>(LINQ-Entities查询,如果这很重要):

public class SomePOCO
{
   public string ParentName { get; set; }
   public string Name { get; set; }
   public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而我正在尝试投射到一个对象(匿名类型将是最好的,因为我只需要方法范围),它有2个属性:

public string ParentName { get; set; }
public ICollection<SimplePoco> { get; set; 
Run Code Online (Sandbox Code Playgroud)

SimplePOCO如下:

public class SimplePOCO
{
   public string Name { get; set; }
   public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我这样做的原因是所有"SomePOCO"的im检索具有相同的ParentName,所以我只想要一次,而不是将线路带来相同的N次并做一次.First().

希望有道理.

最终结果是我应该能够这样做:

var parentName = result.ParentName; // string
var pocos = result.SimplePOCOs; // ICollection<SimplePOCO>
Run Code Online (Sandbox Code Playgroud)

我想我要么需要某种聚合,比如GroupBy或者SelectMany.

有任何想法吗?

Bal*_*a R 8

我想你只需要通过Parent Name做一个小组

var result = collection.GroupBy(i => i.ParentName)
           .Select(g => new {
                                ParentName = g.Key, 
                                SimplePocos = g.Select(i => new SimplePoco
                                                                {
                                                                 Name = i.Name, 
                                                                 Url = i.Url
                                                                 })
                              });  
Run Code Online (Sandbox Code Playgroud)