我有一个IQueryable<SomePOCO>
(一个LINQ-Entities查询,如果这很重要):
public class SomePOCO
{
public string ParentName { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
我正在尝试项目到一个对象(匿名类型最好,因为我只需要方法范围),它有2个属性:
public string ParentName { get; set; }
public ICollection<SimplePoco> { get; set;
SimplePOCO如下:
public class SimplePOCO
{
public string Name { get; set; }
public string Url { get; set; }
}
我这样做的原因是所有“SomePOCO”的im检索具有相同的ParentName,所以我只想要一次,而不是将线路带来相同的N次并做一次.First()
。
希望这是有道理的。
最终结果是我应该能够做到这一点:
var parentName = result.ParentName; // string
var pocos = result.SimplePOCOs; // ICollection<SimplePOCO>
我认为我需要某种聚合,例如GroupBy
或SelectMany
。
有什么想法吗?
答案 0 :(得分:8)
我认为您只需按父母姓名
进行分组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
})
});
答案 1 :(得分:3)
这是第一步。
var groups = myQ.GroupBy(p => p.ParentName);
您需要拥有中间数据结构。我称之为Grouping
。
var myList = new List<Grouping>();
foreach (var group in groups) {
var newGrouping = new Grouping();
new Grouping.ParentName = group.Key;
newGrouping.SimplePocos = group.Select(p => new SimplePoco(p)).ToArray();
}
你应该有SimplePoco
的构造函数,它会为你转换它。