0

I would like to display records from an Umbraco forms on a page. So far, I managed to display:

  • total numbers of records
  • all records where "Display my name" value is TRUE

How do I limit it to display only 5 newest records (where "Display my name" value is TRUE)?

My codes below:

<ul id="formData">
    @{int i = 0;} 
    @foreach (dynamic record in Library.GetApprovedRecordsFromPage(@CurrentPage.Id).OrderBy("Created descending"))
    {  
        if (@record.GetField("Display my name").Values[0].ToString() == "True")
        {
            <li>        
                Name: @record.GetField("Name").Values[0]<br />
                Email: @record.GetField("Email").Values[0]<br />
                Display my name: @record.GetField("Display my name").Values[0]<br /> 
                Created: @record.Created.ToString("dd MMMM yyy")<br />
            </li>
        }
        i++; 
    }     
</ul>
<h4>Total data: @i</h4>
CDspace
  • 2,639
  • 18
  • 30
  • 36
mertamu
  • 43
  • 4

2 Answers2

1

You might be able to put the property value check into a .Where(...)? So

.Where(x => x.GetField("Display my name").Values[0].ToString() == "True").OrderBy(whatevs).Take(5)
Jannik Anker
  • 3,320
  • 1
  • 13
  • 21
  • Thanks for your reply, but adding .Take(5) after the OrderBy limits all records to 5, hence the total numbers of records will always be 5. – mertamu Jul 19 '17 at 21:59
  • @mertamu Updated my answer, sorry for misunderstanding :-) – Jannik Anker Jul 19 '17 at 22:07
  • My apologies for the late response. So I would need to have nested foreach is that right? The second for each would have a .Where() ? – mertamu Jul 20 '17 at 22:54
  • No, just the one foreach - the .Where goes right after the Library.GetApprocedRecordsFromPage() call. – Jannik Anker Jul 21 '17 at 06:43
  • `@foreach (dynamic record in Library.GetApprovedRecordsFromPage(@CurrentPage.Id).Where(x => x.GetField("Display my name").Values[0].ToString() == "True").OrderBy("Created descending"))` is giving me "Server Error" message when I run the page . Did I miss anything? Thanks @jannik-anker – mertamu Jul 24 '17 at 00:38
  • Well, I'm not sure what GetApprovedRecordsFromPage(...) returns and unfortunately can't really test it now, but "structurally" it looks alright to me. Maybe try splitting it up a bit, like below, and debug your way through? "Server error" is very generic and doesn't tell us anything :-s var records = Library.GetApprovedRecordsFromPage(@CurrentPage.Id).Where(x => x.GetField("Display my name").Values[0].ToString() == "True"); @foreach(dynamic record in records.OrderBy("Created descending")) { ... } – Jannik Anker Jul 24 '17 at 09:05
  • As soon as I added `.Where(x => x.GetField("Display my name").Values[0].ToString() == "True")` to the foreach I get the error. So my guess is something to do with the .Where statement. I'll keep debugging. Thank you – mertamu Jul 25 '17 at 21:42
0

I would recommend you to use this code for getting records:

@{
    using (var formStorage = new FormStorage())
    {
        using (var recordStorage = new RecordStorage())
        {
            var form = formStorage.GetForm(Guid.Parse("ede58fd2-9eff-4f88-a5d6-053042983681"));
            var records = recordStorage.GetAllRecords(form).Where(x => x.UmbracoPageId == Model.Content.Id && x.State == FormState.Approved).Where(x => x.GetRecordField("Display my name").Equals("True")).OrderByDescending(x => x.Created).ToList();
        }
    }
}