LINQ group

  • Thread starter Thread starter Peter Morris
  • Start date Start date
P

Peter Morris

responseData.Signals is a List<SignalInfo>

var signalGroups =
from signal in responseData.Signals
where signal.DisplayPath.StartsWith("AppMenu")
orderby signal.DisplayPath
group signal by signal.DisplayPath into signalGroup
select new { Title = signalGroup.Key, Signals = signalGroup };

foreach(var signalGroup in signalGroups)
foreach(SignalInfo signal in ?????????????

How do I get each SignalInfo in the group?


Thanks

Pete
 
This seems very innefficient so there must be a better way of getting a list
of SignalInfo by DisplayPath.

var signalGroups =
from signal in responseData.Signals
where signal.DisplayPath.StartsWith("AppMenu")
orderby signal.DisplayPath
group signal by signal.DisplayPath into signalGroup
select new
{
Title = signalGroup.Key.Split('/')[2],
Signals = new List<SignalInfo>(from signal in responseData.Signals
where signal.DisplayPath == signalGroup.Key select signal)
};


Pete
 
Peter said:
responseData.Signals is a List<SignalInfo>

var signalGroups =
from signal in responseData.Signals
where signal.DisplayPath.StartsWith("AppMenu")
orderby signal.DisplayPath
group signal by signal.DisplayPath into signalGroup
select new { Title = signalGroup.Key, Signals = signalGroup };

foreach(var signalGroup in signalGroups)
foreach(SignalInfo signal in ?????????????

Try
foreach(SignalInfo signal in signalGroup.Signals)
 
Peter said:
responseData.Signals is a List<SignalInfo>

var signalGroups =
from signal in responseData.Signals
where signal.DisplayPath.StartsWith("AppMenu")
orderby signal.DisplayPath
group signal by signal.DisplayPath into signalGroup
select new { Title = signalGroup.Key, Signals = signalGroup };

foreach(var signalGroup in signalGroups)
foreach(SignalInfo signal in ?????????????

How do I get each SignalInfo in the group?

As Martin said in the other post, simply iterate over teh Signals property.

As you return a new type with just the key and the group, you can also do:
var signalGroups =
from signal in responseData.Signals
where signal.DisplayPath.StartsWith("AppMenu")
orderby signal.DisplayPath
group signal by signal.DisplayPath into signalGroup
select signalGroup;

You can then foreach over the query as:
foreach(IGrouping<string, Signal> group in signalGroups)
{
// now obtain each signal in the current group
foreach(Signal s in group)
{
}
// the key is obtainable by group.Key
}

FB

--
------------------------------------------------------------------------
Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
LLBLGen Pro website: http://www.llblgen.com
My .NET blog: http://weblogs.asp.net/fbouma
Microsoft MVP (C#)
------------------------------------------------------------------------
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top