2017-02-08 54 views
0

我在這個對象中有對象和集合。C#用linq更新集合中的一個對象

myObject.myCollection.Where(a => a.Id == Id).FirstOrDefault() = newMyCollection; 

Unfortunely這didnt工作

如果我改變單一的元素,然後工作。例如:

myObject.myCollection.Where(a => a.Id == Id).FirstOrDefault().Id = newMyCollection.Id; 

如何更新所有對象?感謝您的幫助

我可以做這樣的事情:

myObject.myCollection.Remove(objectOfMyCollection); 
myObject.MyCollection.Add(myNewCollection); 

但如果我objectOfMyCollection首先是,然後我的新的對象是最後一次。

+4

Linq中的Q代表 「查詢」 而不是 「更新」。 –

回答

1

試試這個

var customListItem2 = myObject.myCollection.Where(a => a.Id == Id).FirstOrDefault(); 
var index = myObject.myCollection.IndexOf(customListItem2); 

if(index != -1) 
    myObject.myCollection[index] = newCustomListItem; 
+0

真棒!謝謝 – user3697586

+0

ü歡迎:) –

+0

嗯。我的myObject仍然是舊數據。如果(索引!= -1) myObject.myCollection [index] = newCustomListItem; 如果我必須添加.Name = newCustomListItem.Name - 然後工作。任何想法? – user3697586

1

你可以只查詢列表,並遍歷是:

foreach (var obj in myObject.myCollection.Where(a => a.Id == Id).ToList()) { 
    obj.Id = newMyCollection.Id; 
} 
+0

是的,但我想響應:)我可以使用刪除和添加,但如果元素是在例如首先 – user3697586

+0

這個變化索引你是什麼意思的響應? – nbokmans

+0

我的數據庫中的某些元素可能會更改。如果我再次更改數據庫,我不必更改此代碼 – user3697586

0

你將不得不更換您的列表,它是不可能的LINQ底層引用(其設計用於查詢,而不是更新對象)。

要與列表做到這一點使用一個老派的for -loop:

for(int i = 0; i < myList.Count; i++) 
{ 
    if(myList[i].Id == Id) 
    { 
     myList[i] = newElement; 
     break; 
    } 
} 

使用for - 而不是foreach是必要的,因爲在這裏你在你的名單重新引用的情況下這是不可能使用後者。

另一種方法是創建列表的臨時副本,獲取匹配的元素存在,並it's索引列表,並在原來的列表索引處替換元素:

var tmp = myList; 

foreach(var elem in tmp) 
{ 
    if(elem.Id == Id) 
    { 
     var index = myList.IndexOf(x => x.Id == Id); 
     myList[index] = newElement; 
     break; 
    } 
} 
0

要改變只有第一個索引,你可以做這樣的事情:

myObject.myCollection.Where(a => a.Id == Id).FirstOrDefault(a => { a.Id = newMyCollection.Id; return true; }); 

其中用簡單的英語做:

- From myCollection get items Where item's Id is equal to Id

- From selected values get FirstItem and set it's Id to the new one

- Do not check the rest

,甚至使它simplier:

myObject.myCollection.FirstOrDefault(a => { if(a.Id == Id) { a.Id = newMyCollection.Id; return true; } return false; }); 
相關問題