Skip to main content
Home  › ... 2sxc Apps

Data Tutorials

Tutorial Home

Example from App.Query

Queries are pre-build for things like "get all authors and the books of the author in the URL" or similar (more). These are configured in the App administration. The query AuthorsWithBooks (shown to the right) is used in this example. Below you'll see us first iterate through all the items in the Authors Stream. If an author was clicked on (which places the author-id in the url), the query will also return the current Author in the Current stream as well as the CurrentBooks of that author.

Current Author: Raphael Müller (not an author)

Books

@{
  // get the query
  var query = App.Query["AuthorsWithBooks"];

  // get all authors from the stream Authors in the query
  var allAuthors = AsList(query["Authors"]);

  // get the current author (if available) from the stream Current
  var current = AsDynamic(query["Current"].FirstOrDefault());

  // get the books of the current author (if available) from stream CurrentBook
  var books = AsList(query["CurrentBooks"]);
}
<ul>
  @foreach(var person in allAuthors) {
    <!-- this li will have class=selected if it's the current one -->
    <li class='@(person == current ? "selected" : "")'>
      <!-- this creates a link to the current tutorial (data220) and author=id -->
      <a href='@Link.To(parameters: "data220=true&authorId=" + person.EntityId)'>
        @person.FirstName @person.LastName
      </a>
    </li>
  }
</ul>

@if(current != null) {
  if(Text.Has(current.Mugshot)) {
    <img loading="lazy" src="@current.Mugshot?w=100&h=100&mode=crop" width="100px" class="person float-right float-end">
  }
  <h3>Current Author: @current.FirstName @current.LastName</h3>
  <strong>Books</strong>
  <ol>
    @foreach(var book in books) {
      <li>@book.Title</li>
    }
  </ol>
} else {
  <h3>No author selected - click on an author above</h3>
}

Source Code of this file

Below you'll see the source code of the file. Note that we're just showing the main part, and hiding some parts of the file which are not relevant for understanding the essentials. Click to expand the code

@inherits Custom.Hybrid.Razor14
<!-- unimportant stuff, hidden -->
@using ToSic.Razor.Blade;
@using System.Linq;
Example from App.Query Queries are pre... <!-- unimportant stuff, hidden -->

@{
  // get the query
  var query = App.Query["AuthorsWithBooks"];

  // get all authors from the stream Authors in the query
  var allAuthors = AsList(query["Authors"]);

  // get the current author (if available) from the stream Current
  var current = AsDynamic(query["Current"].FirstOrDefault());

  // get the books of the current author (if available) from stream CurrentBook
  var books = AsList(query["CurrentBooks"]);
}
<ul>
  @foreach(var person in allAuthors) {
    <!-- this li will have class=selected if it's the current one -->
    <li class='@(person == current ? "selected" : "")'>
      <!-- this creates a link to the current tutorial (data220) and author=id -->
      <a href='@Link.To(parameters: "data220=true&authorId=" + person.EntityId)'>
        @person.FirstName @person.LastName
      </a>
    </li>
  }
</ul>

@if(current != null) {
  if(Text.Has(current.Mugshot)) {
    <img loading="lazy" src="@current.Mugshot?w=100&h=100&mode=crop" width="100px" class="person float-right float-end">
  }
  <h3>Current Author: @current.FirstName @current.LastName</h3>
  <strong>Books</strong>
  <ol>
    @foreach(var book in books) {
      <li>@book.Title</li>
    }
  </ol>
} else {
  <h3>No author selected - click on an author above</h3>
}



<!-- unimportant stuff, hidden -->