使用linq而不是每个更新列表

时间:2012-03-09 12:11:57

标签: vb.net linq foreach

我对linq有点新意,我只使用linq来过滤数据。现在,我想为下面写一个查询:

For Each k As String In con.Numbers.Keys
      con.Numbers(k).Primary = False
Next

Con.Numbers是一个字典,但现在我把它转换成了一个列表,因此上面的代码不能用于列表,请你告诉我如何用Linq实现它是Con.NUmbers是一个列表。谢谢。

其他信息: 类结构是:

Public Class ContactCon
        Property ConId As String
        Property ConRowID As String
        Property Title As String
        Property Mob1 As String
        Property Mob2 As String
        Property Land1 As String
        Property Land2 As String
        Property Email1 As String
        Property Email2 As String
        Property Fax1 As String
        Property Fax2 As String
        Property Primary As Boolean
        Public Sub New()
            ConId = ""
            ConRowID = ""
            Title = "Contact1"
            Mob1 = ""
            Mob2 = ""
            Land1 = ""
            Land2 = ""
            Email1 = ""
            Email2 = ""
            Fax1 = ""
            Fax2 = ""
            Primary = False
        End Sub
End Class

2 个答案:

答案 0 :(得分:16)

不知道我是否在某处误解了你。

不确定为什么要特别使用LINQ。这非常清楚:

For Each number as ContactCon In con.Numbers
    number.Primary = False
Next

如果由于某种原因您需要类似LINQ的语法,可以使用List(T).ForEach

con.Numbers.ForEach(Sub(n) n.Primary = False)

当然,这不是“真正的”LINQ,但同样,我不确定为什么会这么重要。

如果你真的被迫(?)使用LINQ,你可能会这样做:

con.Numbers.Select(Sub(n) n.Primary = False).ToList()

但当然代码是无稽之谈。不要这样做 - 坚持清楚明确的事情,在这种情况下意味着只是在列表上循环。

修改

修正了Function

的可怕滥用行为

答案 1 :(得分:1)

LINQ代表语言集成查询。查询意味着检索数据,因此更新数据不太好。您可以使用它来检索已更新的数据的另一个副本,但不能直接更新原始数据。

如果您想要更新数据的新列表,您可能会这样做:

Dim NewList = con.Numbers.Select(Function(e) New MyObject() With {.Key = e.Key, .Primary = False}).ToArray()