Reduce = results => from result in results
group result by result.GroupId
into g
select new
{
GroupId = g.Key,
Contacts= g.Select(x =>
x.Contacts).FirstOrDefault(x => x != null),
Subject = g.Select(x =>
x.Subject).FirstOrDefault(x => x != null),
Text = g.Select(x =>
x.Text).FirstOrDefault(x => x != null),
SendDate = g.Select(x =>
x.SendDate).FirstOrDefault(x => x != null),
};
..and it returns this aggregated Message:
{
"GroupId": "groups/1505",
"Contacts": [
"f...@test.com",
"t...@test.com"
],
"Subject": "Latest message",
"Text": "This should be my latest message",
"SendDate": "20120505220951000"
}
Now I need to get the latest Message in each Group. I guess I need to
OrderByDescending on SendDate before the actual aggregation is done. I
have tried order by in some places but it I will not work, just get an
empty result.
Reduce = results => from result in results
group result by result.GroupId
into g
let firstMessage = (from m in g order by m.SendDate).First()
let lastMessage = (from m in g order by m.SendDate desc).First()
select new
{
...
// use first and last messages
...
};
> Now I need to get the latest Message in each Group. I guess I need to
> OrderByDescending on SendDate before the actual aggregation is done. I
> have tried order by in some places but it I will not work, just get an
> empty result.
That looks like it should work. I've changed my code according to
yours but still get empty result, here is my Query:
Reduce = results => from result in results
group result by result.GroupId
into g
let latestMessage = (from m in g
orderby m.SendDate descending select m).FirstOrDefault()
select new
{
GroupId = g.Key,
Emails = latestMessage.Emails,
Contacts = latestMessage.Contacts,
Subject = latestMessage.Subject,
IntroText =
latestMessage.IntroText,
SendDate = latestMessage.SendDate
};
Have I missed something here?
/Mase
On 7 Maj, 15:17, Ryan Heath <ryan.q.he...@gmail.com> wrote:
> Reduce = results => from result in results
> group result by result.GroupId
> into g
> let firstMessage = (from m in g order by m.SendDate).First()
> let lastMessage = (from m in g order by m.SendDate desc).First()
> select new
> {
> ...
> // use first and last messages
> ...
> };
> // Ryan
> On Mon, May 7, 2012 at 2:40 PM, Inveritas <maso...@gmail.com> wrote:
> > Hi Mailing list,
> > I have following reduce in a MultiMap/Reduce:
> > Reduce = results => from result in results
> > group result by result.GroupId
> > into g
> > select new
> > {
> > GroupId = g.Key,
> > Contacts= g.Select(x =>
> > x.Contacts).FirstOrDefault(x => x != null),
> > Subject = g.Select(x =>
> > x.Subject).FirstOrDefault(x => x != null),
> > Text = g.Select(x =>
> > x.Text).FirstOrDefault(x => x != null),
> > SendDate = g.Select(x =>
> > x.SendDate).FirstOrDefault(x => x != null),
> > };
> > Now I need to get the latest Message in each Group. I guess I need to
> > OrderByDescending on SendDate before the actual aggregation is done. I
> > have tried order by in some places but it I will not work, just get an
> > empty result.
> That looks like it should work. I've changed my code according to
> yours but still get empty result, here is my Query:
> Reduce = results => from result in results
> group result by result.GroupId
> into g
> let latestMessage = (from m in g
> orderby m.SendDate descending select m).FirstOrDefault()
> select new
> {
> GroupId = g.Key,
> Emails = latestMessage.Emails,
> Contacts = latestMessage.Contacts,
> Subject = latestMessage.Subject,
> IntroText =
> latestMessage.IntroText,
> SendDate = latestMessage.SendDate
> };
> Have I missed something here?
> /Mase
> On 7 Maj, 15:17, Ryan Heath <ryan.q.he...@gmail.com> wrote:
> > How about something like:
> > Reduce = results => from result in results
> > group result by result.GroupId
> > into g
> > let firstMessage = (from m in g order by m.SendDate).First()
> > let lastMessage = (from m in g order by m.SendDate desc).First()
> > select new
> > {
> > ...
> > // use first and last messages
> > ...
> > };
> > // Ryan
> > On Mon, May 7, 2012 at 2:40 PM, Inveritas <maso...@gmail.com> wrote:
> > > Hi Mailing list,
> > > I have following reduce in a MultiMap/Reduce:
> > > Reduce = results => from result in results
> > > group result by result.GroupId
> > > into g
> > > select new
> > > {
> > > GroupId = g.Key,
> > > Contacts= g.Select(x =>
> > > x.Contacts).FirstOrDefault(x => x != null),
> > > Subject = g.Select(x =>
> > > x.Subject).FirstOrDefault(x => x != null),
> > > Text = g.Select(x =>
> > > x.Text).FirstOrDefault(x => x != null),
> > > SendDate = g.Select(x =>
> > > x.SendDate).FirstOrDefault(x => x != null),
> > > };
> > > Now I need to get the latest Message in each Group. I guess I need to
> > > OrderByDescending on SendDate before the actual aggregation is done. I
> > > have tried order by in some places but it I will not work, just get an
> > > empty result.