2

MemberProfiles の一般的なリストをループしたい:

List<MemberProfile> jobseekers    

<div class='group'>タグ内のアイテムをグループ化します。Every <div class="group"> には、次のような 3 つの求職者が含まれている必要があります。

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

.skip() や .take() など、一般的なリストでさまざまな方法を試しましたが、このシナリオの実装に成功していません。

私のコードは次のようになります。

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);
    }
}    

誰かがこのシナリオを実装するために私を正しい軌道に乗せることができますか?

4

4 に答える 4

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

    }
}

これはあなたが求めているものですか?

于 2012-07-24T07:31:08.937 に答える
1

あなたはlinqでそれをしたいようですので、ここに行きます:

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);
    }
}
于 2012-07-24T07:31:05.883 に答える
0

あなたの質問は完全に明確ではありませんが、jobseekersリストをそれぞれ 3 つの要素のグループに分割し、3 つの各グループに対して何らかの操作を実行して HTML スニペットを取得するように思われるため、出力は一連の HTML スニペットになります。 .

jobseekersには常に 3 の倍数の要素があると仮定しましょう。常に 3 つの要素があるとは限らない場合、このソリューションは残りの要素を含む最後のグループを残し、要素が 3 つ未満のグループをドロップすることでそのグループを除外できます (これWhereは の直後になりますGroupBy)。LINQ を使用する場合:

IEnumerable<string> htmlSnippets = jobseekers
    .Zip(Enumerable.Range(0, jobseekers.Count), Tuple.Create)
    .GroupBy(tup => tup.Item2 / 3)
    .Select(GenerateHtmlString);
string combinedHtmlString = string.Join(string.Empty, htmlSnippets);

public string GenerateHtmlString(IEnumerable<MemberProfile> profiles)
{
    return string.Format(@"<div class=""jobseeker"">{0}</div>",
        // The question doesn't specify how the 3 jobseekers are rendered in HTML
        );
}
于 2012-07-24T07:32:11.543 に答える
0

次の回答から:LINQを使用してリストをサブリストに分割する

public static List<List<MemberProfile>> Split(List<MemberProfile> source)
{
    return  source
        .Select((x, i) => new { Index = i, Value = x })
        .GroupBy(x => x.Index / 3)
        .Select(x => x.Select(v => v.Value).ToList())
        .ToList();
}

他の回答も参照してください

于 2012-07-24T07:30:15.267 に答える