Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to loop over generic List<T> and group per 3 items

I want to loop over a generic list of MemberProfiles:

List<MemberProfile> jobseekers    

, and group the items in a <div class='group'>tag. Every <div class="group"> should contain 3 jobseekers like this:

<div class="group">
    <div class="jobseeker">
        ...data jobseeker
    </div>
</div>

I tried different methods on generic list, like .skip() and .take() but I'm not succeeding in implementing this scenario.

My code looks like this:

foreach (MemberProfile jobseekerProfile in Jobseekers)
{
    if (jobseekerProfile != null)
    {
        Label lblJobseeker = new Label();
        StringBuilder sbJobseeker = new StringBuilder();
        sbJobseeker.Append(string.Format("<p><strong>{0}&nbsp;{1}</strong><br />", jobseekerProfile.FirstName, jobseekerProfile.LastName));
        XPathNodeIterator preValues = library.GetPreValues(1362);
        preValues.MoveNext();
        XPathNodeIterator iterator2 = preValues.Current.SelectChildren("preValue", "");
        while (iterator2.MoveNext())
        {
            if (jobseekerProfile.JobType == iterator2.Current.GetAttribute("id", ""))
            {
                sbJobseeker.Append(string.Format("looking for a {0}<br />", iterator2.Current.Value));
            }
        }
        XPathNodeIterator iterator3 = library.GetPreValues(1363);
        iterator3.MoveNext();
        XPathNodeIterator iterator4 = iterator3.Current.SelectChildren("preValue", "");
        StringBuilder sbJobExperience = new StringBuilder();
        string[] strJobExperience = jobseekerProfile.JobExperience.Split(new char[] { ',' });
        int counter = 1;
        while (iterator4.MoveNext())
        {
            if (jobseekerProfile.JobExperience.Contains(iterator4.Current.GetAttribute("id", "")))
            {
                if (counter != strJobExperience.Count<string>())
                {
                    sbJobExperience.Append(string.Format("{0}, ", iterator4.Current.Value));
                    counter++;
                }
                else
                {
                    sbJobExperience.Append(string.Format("{0}", iterator4.Current.Value));
                }
            }
        }
        sbJobseeker.Append(string.Format("Fields of experience: {0}<br />", sbJobExperience.ToString()));
        sbJobseeker.Append(string.Format("Years of experience: {0}<br />", jobseekerProfile.YearsExperience));
        sbJobseeker.Append(string.Format("Country: {0}<br />", jobseekerProfile.Country));
        sbJobseeker.Append(string.Format("<form name='frmSelect' action='/selectjobcandidate.aspx' method='post'><input type='hidden' name='username' value='{0}' /><input type='submit' value='select candidate' /></form>", jobseekerProfile.UserName));
        lblJobseeker.Text = sbJobseeker.ToString();
        phListJobseekers.Controls.Add(lblJobseeker);
    }
}    

can someone put me on the right track to implement this scenario?

like image 721
Toontje Avatar asked Dec 01 '25 05:12

Toontje


2 Answers

for (var i = 0; i < Jobseekers.Count; i += 3)
{
    foreach (MemberProfile jobseekerProfile in Jobseekers.Skip(i).Take(3))
    {

    }
}

Is this what you are after?

like image 170
MortenRøgenes Avatar answered Dec 02 '25 18:12

MortenRøgenes


Since you seem to want to do it with linq, here we go:

var tagged = Jobseekers.Select((x, i) => new { x, i });
var grouped = tagged.ToLookup(t => (t.i - 1) / 3, t => t.x);

foreach (var group in grouped)
{
    Console.WriteLine("Group:");
    foreach (var item in group)
    {
        Console.WriteLine(item);
    }
}
like image 29
Timbo Avatar answered Dec 02 '25 18:12

Timbo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!