如何使用linq更新链接列表中的节点值
本文关键字:节点 列表 链接 何使用 linq 更新 | 更新日期: 2023-09-27 18:12:47
我想使用linq更新链表中的节点值。遍历列表,找到正确的节点并更新值是可行的,但我认为linq方法可能更干净。
这是我的尝试,它给出了一个编译错误cannot convert lambda expression to type <Main.Globals.Node> because it is not a delegate type
:
// get IV value where Node BookID=4
var val = Globals.BookLL.Where(B => B.BookID == 4).Select(B => B.IV).Single();
// can update first node using this method
Globals.BookLL.First.Value.IV = 999;
// can upddate IV by traversing list
LinkedListNode<Globals.Node> Current = Globals.BookLL.First;
while (Current != null)
{
if(Current.Value.BookID==4)
{
Current.Value.IV = 444;
}
Current = Current.Next;
}
// how can you update IV using linq?
Globals.BookLL.Find(B => B.BookID == 4).Value.IV = 999; // cannot convert lambda expression to type <Main.Globals.Node> because it is not a delegate type
谢谢你的帮助。
Globals.BookLL.Single(b => b.BookId == 4).IV = 44;
如果BookId是唯一的,则可以使用single
。
如果使用
Globals.BookLL val = Globals.BookLL.Single(B => B.BookID == 4);
要确定项目,可以使用Find()
Globals.BookLL.Find(val).Value.IV = 999;
更改其值
Globals.BookLL.Find(B => B.BookID == 4)
这将返回一个IEnumerable<Globals.Node>
,您应该使用LINQ的First()
:
Globals.BookLL.First(B => B.BookID == 4).Value.IV = 999;