У меня возникли проблемы с созданием группы оператором linq, который проектируется в список Foo
, в котором каждый Foo
также может содержать список Bar
. В моем случае ни один из классов не имеет конструкторов без параметров, поэтому я немного теряюсь в синтаксисе.linq group by с проекцией на класс с безпараметрическим конструктором
https://dotnetfiddle.net/9zplqa
public class linqGrouping
{
public linqGrouping()
{
var data = this
.TestData()
.GroupBy(gb => new { gb.GroupProperty, gb.RandomProperty })
.Select(s => new Foo(
s.Key.GroupProperty,
s.Key.RandomProperty,
// Here's where I'm having issues, I was the non key parts of the group to be placed into a list of bar, I'm not sure how to access the "Values" as opposed to the Key
new List<Bar>()
{
// vvv Here's my problem area vvv //
//new Bar(someProperty, someOtherProperty)
// ^^^ Here's my problem area ^^^ //
}
));
// The Expected object I'm hoping to create would be:
List<Foo> foo = new List<Foo>()
{
new Foo(1, 1, new List<Bar>()
{
new Bar(1, "test"),
new Bar(2, "test2")
}),
new Foo(2, 1, new List<Bar>()
{
new Bar(1, "test")
})
};
}
public List<RawData> TestData()
{
List<RawData> data = new List<RawData>();
data.Add(new RawData()
{
GroupProperty = 1,
RandomProperty = 1,
SomeOtherProperty = "test",
SomeProperty = 1
});
data.Add(new RawData()
{
GroupProperty = 1,
RandomProperty = 1,
SomeOtherProperty = "test2",
SomeProperty = 2
});
data.Add(new RawData()
{
GroupProperty = 2,
RandomProperty = 1,
SomeOtherProperty = "test",
SomeProperty = 1
});
return data;
}
}
public class RawData
{
public int GroupProperty { get; set; }
public int RandomProperty { get; set; }
public int SomeProperty { get; set; }
public string SomeOtherProperty { get; set; }
}
public class Foo
{
public int GroupProperty { get; private set; }
public int RandomProperty { get; private set; }
public List<Bar> Bars { get; private set; }
public Foo(int groupProperty, int randomProperty, List<Bar> bars)
{
this.GroupProperty = groupProperty;
this.RandomProperty = randomProperty;
this.Bars = bars;
}
}
public class Bar
{
public int SomeProperty { get; private set; }
public string SomeOtherProperty { get; private set; }
public Bar(int someProperty, string someOtherProperty)
{
this.SomeProperty = someProperty;
this.SomeOtherProperty = someOtherProperty;
}
}
Как я могу идти об этом? Есть ли лучший способ сделать это, чем направление, в котором я собираюсь?
спасибо! Достаточно легко ... может быть, на днях я действительно получу * linq и как это работает :( – Kritner