DataAnnotations

System.ComponentModel.DataAnnotations.Schema attributes

Attribute Description
Table The database table and/or schema that a class is mapped to.
Column The database column that a property is mapped to.
ForeignKey Specifies the property is used as a foreign key in a relationship.
DatabaseGenerated Specifies how the database generates values for a property.
NotMapped Applied to properties or classes that are to be excluded from database mapping.
InverseProperty Specifies the inverse of a navigation property
ComplexType Denotes that the class is a complex type. *Not currently implemented in EF Core.

System.ComponentModel.Annotations attributes

Attribute Description
Key Identifies one or more properties as a Key
Timestamp Specifies the data type of the database column as rowversion
ConcurrencyCheck Specifies that the property is included in concurrency checks
Required Specifies that the property’s value is required
MaxLength Sets the maximum allowed length of the property value (string or array)
StringLength Sets the maximum allowed length of the property value (string or array)

Algunos enlaces:

Validando sin parar. Uso de DataAnnotations

https://www.learnentityframeworkcore.com/configuration/data-annotation-attributes

https://www.c-sharpcorner.com/article/model-validation-using-data-annotations-in-asp-net-mvc/

Ejercicio Linq funciones

Vamos a crear un juego de torretas y vamos a crear la clase Torreta que tiene como propiedades:

Nombre

Posicion(x,y) struct con propiedades x e y

Rango (int)

Ataque(int)

Sería conveniente, a efectos de lo que vamos a hacer después, sobreescribir los métodos toString() Equals() y getHashCode()

Vamos a crear una lista de torretas que van a abarcar un terreno de 400×400. Tendremos un cuadrado de 4×4 torretas colocadas en las posiciones

(50,50) (150,50) (250,50)(350,50)

(50,150) (150,150) (250,150)(350,150)

(50,250) (150,250) (250,250)(350,250)

(50,350) (150,350) (250,350)(350,350)

El nombre será correlativo (Torreta1,Torreta2,…) el rango de todas es de 100 y el ataque es la suma de las coordenadas dividido por 10.

A partir de aquí:

Mostrar todas las torretas que tienen potencia de ataque superior a 50

Mostrar todas las torretas que tienen potencia de ataque superior a 50 en la primera fila

Mostrar las torretas ordenadas por ataque y después por la posición x (primera coordenada).

¿Cual es la media de ataque de todas las torretas?

¿Cual es la torreta de menos ataque?

¿Hay alguna torreta que tenga una potencia de ataque mayor de 60? (Si o no, no buscarla)

Mostrar las torretas que puedan atacar a la posición (200,200). Calcular la potencia de ataque que converge en ese punto.

Ejercicio extensión String

Vamos a extender el tipo string añadiendo las siguientes funciones:

trimAll() ->Elimina todos los espacios de una cadena. Ejemplo:


string cad="    hola    que    tal   ";

Console.Writeline(cad.trimALL);

Mostraría:

holaquetal

toTitle() -> Convierte la primera letra de cada palabra en mayúsculas y el resto en minúsculas. Ejemplo:


string cad = "hola que tal";
Console.WriteLine(cad.toTitle());
string cad = "HOLA que TAL";
Console.WriteLine(cad.toTitle());
string cad = "hOLA qUE tAl";
Console.WriteLine(cad.toTitle());

Mostraría:

Hola Que Tal

Hola Que Tal

Hola Que Tal

reverse() -> Nos da la vuelta a la cadena. Ejemplo:


string cad = "hola que tal";
Console.WriteLine(cad.reverse());

Nos mostraría:

lat euq aloh

palindromo() -> Nos devuelve true si la cadena es palíndroma (se lee igual empezando por el principio o por el final) No hay que tener en cuenta espacios, pero de momento ignoremos los acentos. Ejemplo:


string cad = "Isaac no ronca asi";
Console.WriteLine(cad.palindromo());

Mostraría: true

Ejercicio LINQ

Con la clase Alumno (https://github.com/juanpablofuentes/CSharp/blob/master/LINQ/LinqBasico/LinqBasico/Alumno.cs) y los siguientes datos:


List<Alumno> listaAlumnos = new List<Alumno>()
{
new Alumno("Eva",20,6.0),
new Alumno("Ana",22,7.0),
new Alumno("Rosa",22,4.0),
new Alumno("Ot",20,3.0),
new Alumno("Iu",30,6.8),
new Alumno("Pep",32,5.9),
new Alumno("Laia",30,2.3),
new Alumno("Quim",32,1.7),
};

Crear las consultas LINQ y mostrar los datos para obtener lo siguiente:

1.- Alumnos que han aprobado mayores de 30 años.

2.- Agrupar por Aprobado/Suspendido y mostrar la lista

3.- Agrupar por la longitud del nombre ordenado de mayor a menor

4.- Agrupar por la longitud del nombre y mostrar aquellos grupos cuya suma de edades es mayor de 60