我有一組物件
ObservableCollection<ISettingNode> nodes = new ObservableCollection<ISettingNode>() {
new Node("Node1", tabs1);
new Node("Node1", tabs2);
new Node("Node1", tabs3);
new Node("Node2", tabs4);
new Node("Node3", tabs5);
}
您能否告訴我,我如何從這個集合中獲得一個集合,其中所有具有相同名稱的物件將合并為一個物件。在我的情況下,我希望將集合的前三個元素作為一個元素,類似于 Node("Node1", tabs) 其中 tabs 等于 tabs1 tabs2 tabs3?所以結果將是:
ObservableCollection<ISettingNode> nodes = new ObservableCollection<ISettingNode>() {
new Node("Node1", tabs);
new Node("Node2", tabs4);
new Node("Node3", tabs5);
}
我知道如何在沒有 Linq 的情況下做到這一點,但它有很多代碼。我想使用Linq獲取它,但我不明白如何撰寫查詢。
節點物件由簡單的類表示:
public class SettingNode : ISettingNode
{
public string Name { get; private set; }
public IEnumerable<ISettingTab> Tabs { get; private set; }
}
uj5u.com熱心網友回復:
您可以,然后將這些組投影回一個,將選項卡組合在一起。GroupBy ISettingNode.NameIEnumerable<ISettingNode>
假設 for 的建構式Node可以采用IEnumerable<ISettingTab>...
IEnumerable<ISettingNode> groupedNodes = nodes
.GroupBy(node => node.Name)
.Select(grp => new Node(grp.Key, grp.SelectMany(grpNode => grpNode.Tabs)));
uj5u.com熱心網友回復:
您可以將GroupBy陳述句用于 IEnumerable。然后,您可以將其傳遞回 Observable 串列:
nodes = new ObservableCollection<Node>(
nodes
.GroupBy(node => node.NodeName)
.Select(node => new Node(node.Key, node.Select(x => x.Tab)))
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/360821.html
