我一直在與這個問題搏鬥了幾個小時,現在我開始認爲我的兔子洞太遠了。之前,我完全放棄,我希望有人也許能夠提供一些線索這對我來說...一致地使用GroupBy和SelectMany
public class Object
{
public Object()
{
Properties = new List<Property>();
}
public int Id { get; set; }
public IList<Property> Properties { get; set; }
}
public class Property
{
public string Name { get; set; }
public dynamic Value { get; set; }
}
[Test]
public void ShouldBeAbleToGroupAnArrayOfObjectsByASpecificProperty()
{
// Arrange
var objects = new List<Object>();
var doorObject = new Object() {
Properties = new List<Property>() {new Property() {Name = "Level", Value = "Level 1"}}
};
var wallobject = new Object() {
Properties = new List<Property>() { new Property() { Name = "Level", Value = "Level 2" } }
};
var chairObject = new Object() {
Properties = new List<Property>() { new Property() { Name = "Level", Value = "Level 2" } }
};
objects.Add(doorObject);
objects.Add(wallobject);
objects.Add(chairObject);
// Act
var groupBy = objects.SelectMany(obj => obj.Properties).GroupBy(props => props.Value);
// Assert
Assert.That(groupBy.Count(), Is.EqualTo(2));
}
該測試通過,但問題是,我返回屬性的數組。我試圖獲得一個對象數組。我正在嘗試做什麼?
如果我理解正確,您試圖按照其「Level」屬性對對象進行分組 - 如果存在具有多個不同值屬性的對象,您希望發生什麼? – tzaman 2012-03-30 02:19:07
@tzaman - 我不太確定我是否理解這個問題?屬性當然可以有不同的值。在上面的例子中,我希望得到一個最終結果:一組分組的對象,所有對象都按其屬性集合的「值」分組。目前我並不擔心一個負面的測試案例。這有幫助嗎? – 2012-03-30 02:27:17
如果它在該集合中具有不同的值,哪個組是應該進入的對象?即如果fooObject在其屬性集中同時表示「級別1」和「級別2」,是否應該分爲兩組? – tzaman 2012-03-30 02:32:07