J'ai deux liste comme je veux remplacer J'essayais quelque chose comme ça - P> client.ordider = ordre.Id où order.customername = client.name code> p> p> Je veux remplacer Liste des clients Valeur de commande à partir de la liste de commande lorsque Customername correspond à Nom ProP CODE> P> customer = order.Select(eo => new Customer { Name = eo.CustomerName });
5 Réponses :
LINQ convient principalement à la requête, pas à la modification des données.
à la place, je voudrais simplement utiliser un simple bien sûr Cette approche ne fonctionnera pas aussi bien lorsqu'il existe plusieurs commandes par client. Je conseillerais également de renommer les variables au pluriel - pour une approche purement linq, vous pouvez écrire Un foreach code>: p> clients code> et commandes code> pour mieux dénoter leur signification. P> foreach code> méthode d'extension LINQ, mais je trouve un explicite code> une solution plus lisible. p> p>
Vous voulez effectuer une opération rejoindre em> (probablement une jointure intérieure). LINQ fournit une telle caractéristique mais @Martin Zikmund dit que je ferais prudent la manipulation des données directement. P> p>
Vous pouvez faire boucler des paires de commandes client et correspondante et mettre à jour les clients pour uniquement les paires correspondantes.
var matched = customers.Join(orders,
customer => customer.Name,
order => order.CustomerName,
(customer, order) => (Customer: customer, Order: order));
foreach (var pair in matched)
{
pair.Customer.OrderId = pair.Order.Id;
}
Vous devez rejoindre les deux listes sur la propriété Nom code> à partir du client et de la propriété Nom d'utilisateur code> à partir de la commande, puis assignez OrderId code> à partir de la commande comme List<Customer> result = new List<Customer>();
result = (from c in customer
join o in order on c.Name equals o.CustomerName
select new Customer
{
Id = c.Id,
Name = c.Name,
OrderId = o.Id
}).ToList();
foreach (var item in result)
{
Console.WriteLine($"Id: {item.Id}, \t Name: {item.Name}, \t OrderId: {item.OrderId}");
}
Console.ReadLine();
LINQ est principalement utilisé pour interrogé. Vous pouvez créer une nouvelle liste qui correspond à vos exigences.
Si vous le souhaitez, vous pouvez attribuer cette nouvelle liste à vos clients variables. P>
Vous souhaitez rejoindre vos clients et vos commandes sur le nom du client.
Solution simple: p> hélas, cela ne fonctionnera pas si vous avez un client code> avec plusieurs commandes / Code>: P> var result = customers.GroupJoin(orders, // GroupJoin the customers with orders
customer => customer.Name, // from every customer take the Name
order => order.CustomerName, // from every order take the CustomerName
(customer, orders) => new // for every customer with all his matching orders
{ // make one new object
Id = customer.Id, // take Id and Name from the matching Customer
Name = customer.Name,
// TODO Decide what to do if there are several orders for customer with this name
// Keep all orders? Or keep the oldest one, the newest one?
// the unpaid ones?
AllOrders = orders.ToList(),
OldestOrder = orders.Orderby(order => order.Date).FirstOrDefault(),
NewestOrder = orders.OrderByDescending(order => order.Date).FirstOrDefault(),
UnpaidOrders = orders.Where(order => order.Status == Status.Unpaid).ToList(),
})
.ToList();