2012-06-11 24 views
14

Czy mogę zaktualizować 2 pola za pomocą pętli foreach linq na raz? Przykładowy fragment: Mam dane użytkownika z polami Nazwa, Email, CreateTime, LastUpdateTime. Muszę zresetować CreateTime i LastUpdateTime dla wszystkich użytkowników.aktualizacja 2 pól przy użyciu linq foreach

Aby zaktualizować używam 2 połączenia jak poniżej

users.ForEach(x => x.CreateTime= DateTime.Now.AddMonths(-1)); 
users.ForEach(x => x.LastUpdateTime = DateTime.Now); 

zamiast mogę to zrobić w jednym z użyciem pętli foreach LINQ?

+0

tak, możesz to zrobić. – Reniuz

+0

To NIE JEST LINQ. – leppie

+7

Podczas gdy dostaję część nie linq, nie rozumiem tego, co się dzieje. OP najwyraźniej próbuje się uczyć, a nieuczciwe użytkowanie zupełnie nie pomaga. O ile wiem, pytanie zawiera wszystkie normalne elementy, prawda? – Maverik

Odpowiedz

39

dobrze zacząć, zakładając, że jest to ten nie jest za pomocą LINQ. Ale tak, można tworzyć wyrażenia lambda stosując ciało oświadczenie:

users.ForEach(x => { 
    x.CreateTime = DateTime.Now.AddMonths(-1); 
    x.LastUpdateTime = DateTime.Now; 
}); 

Jednak może również chcą używać jednego spójnego czasu dla wszystkich aktualizacji:

DateTime updateTime = DateTime.Now; 
DateTime createTime = updateTime.AddMonths(-1); 

users.ForEach(x => { 
    x.CreateTime = createTime; 
    x.LastUpdateTime = updateTime; 
}); 

To naprawdę nie jest jasne dlaczego chcesz to osiągnąć w ten sposób. Proponuję za pomocą foreach pętlę zamiast:

DateTime updateTime = DateTime.Now; 
DateTime createTime = updateTime.AddMonths(-1); 

foreach (var user in users) 
{ 
    user.CreateTime = createTime; 
    user.LastUpdateTime = updateTime; 
} 

See Eric Lippert na blog post on foreach vs ForEach więcej myśli na ten temat.

8

to faktycznie nie LINQ, ale można spróbować

users.ForEach(x => { x.CreateTime = DateTime.Now.AddMonths(-1); 
        x.LastUpdateTime = DateTime.Now; }); 
Powiązane problemy