Le code ci-dessous ne fonctionnera pas, car il se plaint que j'essaie d'ajouter un type Anon dans un type de Clients. Comment puis-je stocker certains résultats dans une autre variable après les avoir projetés à l'origine et avoir perdu le type d'origine.

(PS. J'ai simplifié mon exemple mais je traite en fait un cas plus complexe. Ne pas projeter n'est pas une option dans mon cas actuel. Modifié pour apporter des éclaircissements.)

var clients = Clients.Where(c => c.FirstName.StartsWith("Mark"))
.Select(c => new {
    LastName = c.LastName.ToUpper(),
    c.DateAdded,
    c.FirstName,
})
.ToList();
var certainClients = new List<Clients> { };

foreach (var client in clients)
{
    if(client.DateAdded.Date < DateTime.Today) {
        certainClients.Add(client);
    }
}

certainClients.Dump();
0
Zevi Sternlicht 12 févr. 2020 à 00:45

2 réponses

Meilleure réponse

Il y a deux options.

D'abord. Au lieu d'utiliser un type de données anon, utilisez le type de données Clients. En effet, vous créez un objet Clients -

var clients = Clients.Where(c => c.FirstName.StartsWith("Mark"))
              .Select(c => new Clients{
                       LastName = c.LastName.ToUpper(),
                       c.DateAdded,
                       c.FirstName,
 })

Seconde. Créez une liste de object et attribuez-lui n'importe quel type de données personnalisé/anon -

var certainClients = new List<object> { };
1
Gaurav Mathur 11 févr. 2020 à 22:13

Le meilleur moyen est de projeter vers une classe d'entité commerciale personnalisée. Cela signifie que nous définissons la classe nous-mêmes. Par exemple.

 public class ClientEntity
    {
       public string LastName;
       public DateTime DateAdded;
        // etc for custom fields or properties you want
    }

Ensuite, nous pouvons simplement projeter sur notre classe sur mesure

var clients = Clients.Where(c => c.FirstName.StartsWith("Mark"))
              .Select(c => new ClientEntity{
                       LastName = c.LastName.ToUpper(),
                       DateAdded = c.DateAdded,
                       etc
 })

De cette façon, il évite List <object> qui n'est pas sécurisé et n'a pas besoin d'être similaire à la classe cliente d'origine, par exemple si nous voulons la longueur du nom d'origine.

0
Joe Starbright 14 mai 2020 à 01:28