【问题标题】:How to update node value in a linkedlist using linq如何使用 linq 更新链表中的节点值
【发布时间】:2016-10-12 10:16:32
【问题描述】:

我想使用 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

感谢您的帮助。

【问题讨论】:

  • 如果是Linq方法,应该调用First:Globals.BookLL.First()

标签: c# linq linked-list find


【解决方案1】:
Globals.BookLL.Single(b => b.BookId == 4).IV = 44;

如果 BookId 是唯一的,您可以使用 single

【讨论】:

  • 我可以对嵌套链表使用相同的方法吗?我收到一个错误:var K = Globals.BookLL.Single(B =&gt; B.BookID == 4); var G=K.GreeksLL.Single(G =&gt; G.BookOrComp == "Book" &amp;&amp; G.GreekType == "Delta"); a local or parameter name G cannot be declared in this scope...
  • :D没问题!
【解决方案2】:

如果你使用

Globals.BookLL val = Globals.BookLL.Single(B => B.BookID == 4);

确定项目,可以使用Find()

Globals.BookLL.Find(val).Value.IV = 999; 

改变它的价值

【讨论】:

  • 第一个BookLL - the type or namespace could not be found...出现编译错误
  • @Zeus 将 BookLL 替换为 Globals.BookLL
【解决方案3】:
Globals.BookLL.Find(B => B.BookID == 4)

这会返回一个IEnumerable&lt;Globals.Node&gt;,你应该使用LINQ的First()

Globals.BookLL.First(B => B.BookID == 4).Value.IV = 999;

【讨论】:

  • First() 返回没有 Value 属性的 BookLL
  • 谢谢,但我认为 fubo 是对的。我在IV 上收到一个编译错误,说double does not contain a definition for IV and no extension method IV accepting ....
  • 谢谢大家,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多