我有我要更新的串列是來自所有用戶的活動標志,例如
userList:[
{'name':'a', isActive:'Y'},
{'name':'b', isActive:'N'},
{'name':'c', isActive:'Y'},
{'name':'d', isActive:'N'},
];
我想將 isActive 從 Y 更改為 N 并從 N 更改為 Y,我的更新串列如下所示
userList:[
{'name':'a', isActive:'N'},
{'name':'b', isActive:'Y'},
{'name':'c', isActive:'N'},
{'name':'d', isActive:'Y'},
];
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
LINQ 代表 Language Integrated Query - 它是一種查詢工具,而不是修改資料。LINQ 查詢不應該有副作用,例如“每次運行它都會更改資料并給出不同的答案”。更改與正在查詢的資料無關的其他資料也是一個副作用。
如果您想使用基于 lamdba 的方法永久更改串列中的專案,您可以ForEach在 List 上使用 - 這不是 LINQ 的事情;這是一個串列的事情:
myList.ForEach(item => item.isActive = (item.isActive == 'Y' ? 'N' : 'Y'));
..但這與馬特沃森在評論中發布的代碼沒有顯著不同,使用普通的foreach
如果您想每次都從資料中計算當前活動的倒數,那么可以使用 LINQ:
myList.Select(item =>
new Item{
name = item.name,
isActive = (item.isActive == 'Y' ? 'N' : 'Y')
}
);
您可以一遍又一遍地運行它,并且輸出穩定;如果 myList 資料未更改,則此輸出將是一個串列,其中包含處于活動狀態的翻轉專案
這是一個有副作用的 LINQ 查詢;它每次運行時都會修改陣列:

第一次,Selecta[idx] 將陣列索引 0 從 1 提高到 2,但該 操作回傳增量之前的值,例如 1(a[0]現在是 2)。這意味著您看到“原始陣列”,即1, 2, 3, 4反映在z1結果,但是被撞了z2一次(并且a充滿了被撞了兩次的數字)
不要這樣做;這會導致很多問題。(我故意沒有將代碼作為文本放入,以防止復制粘貼我們不應該撰寫的代碼)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431539.html
上一篇:SpringBoot框架中Mybatis-plus的簡單使用
下一篇:基于屬性對列舉執行LINQ操作
