2009-11-21 47 views
29

的名單說我有一個看起來像這樣簡單的例子,一個實體:使用LINQ to更新屬性在實體

MyEntity 
{ 
    int property1; 
    int property2; 
    int property3; 
} 

現在假設我有這方面的entites的IEnumerable名單。有沒有可以執行的LINQ查詢,將列表中的每個實體的值設置爲property1?我知道我可以通過foreach來做到這一點,但是想知道LINQ是否可以更優雅地做到這一點。

回答

54

像這樣:

var result = GetMyIEnumerable() 
       .ToList(); 
result.ForEach(x => x.property1 = 100); 
+0

絕對精彩!如此微妙而強大 – 2017-03-24 14:44:21

4

如果您有100個屬性,反射將是最優雅的。 LINQ的查詢不更新。

4

要Darin的點,LINQ是專爲查詢。在使用LINQ時,我已經進入了心態,被查詢的對象應該被視爲不可變的。但是,選擇運營商也非常適合轉型。

所以,你可以從一組轉換到另一個如下解決您的問題:

var result = myEntityCollection.Select(e => { 
    var ret = e; 
    e.property1 = 100; 
    return e; }); 

原來集合中的項目是不變的,但在結果中的項目現在都property1設置爲100

1

下面是我發現的兩種解決方案。

result = result.Where(x => (x.property1 = 100) == 100).ToList(); 

result = result.Select(c => { c.property1 = 100; return c; }).ToList(); 
相關問題