私はこの問題に数時間悩まされています。私はウサギの穴から遠く離れすぎていると思っています。私は完全にあきらめる前に、私は誰かが私のために、この上でいくつかの光を当てることができるかもしれない願っています...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));
}
このテストはパスするが、問題は、私は、プロパティの配列を返すんだということです。私はオブジェクトの配列を取得しようとしています。私がしようとしていることは可能ですか?
objects.GroupBy(obj => obj.Properties.First().Value);
または
objects.GroupBy(obj => obj.Properties.First(p => p.Name == "Level").Value);
私が正しく理解している場合は、オブジェクトを「レベル」プロパティでグループ化しようとしています。複数の異なる値のプロパティを持つオブジェクトがある場合、何が起こりたいですか? – tzaman
@tzaman - 私はその質問を理解しているかどうか分かりません。プロパティは確かに異なる値を持つことができます。上記の例では、最終的な結果を得たいと思います。オブジェクトのグループ化されたセットは、すべてプロパティコレクションの「値」によってグループ化されています。私は現時点で否定的なテストケースに心配していません。それは役に立ちますか? –
そのコレクション内の値が異なる場合は、どのグループに入るべきオブジェクトですか?つまり、fooObjectのプロパティセットに「レベル1」と「レベル2」の両方があるとしたら、それは2つのグループに分かれていますか? – tzaman