gpt4 book ai didi

VB.NET 和 LINQ 查询字典

转载 作者:行者123 更新时间:2023-12-02 02:15:46 24 4
gpt4 key购买 nike

我需要在下面的字典中对 VB.NET 进行简单的 LINQ 查询,但我对这个主题真的很陌生,所以我需要你的帮助。

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim appEnums As New Dictionary(Of Integer, String)

appEnums.Add(1, "www.eva.com")
appEnums.Add(2, "www.eva2.com")
appEnums.Add(4, "www.evanetwork.com")
appEnums.Add(5, "www.eva3.com")
appEnums.Add(6, "www.eva4.com")
appEnums.Add(7, "www.eva5.com")
appEnums.Add(8, "www.eva6.com")
appEnums.Add(9, "www.eva1.com")
appEnums.Add(10, "www.eva7.com")

Dim startSite As Integer = 1
Dim mainSite As Integer = 4
Dim returnSite As Integer = 5
End Sub

我在这里需要的是根据这些规则检索单个网站(字符串类型的字典值)或无(如果查询找不到负担得起的结果):

  • 字典键(整数)必须大于 startSite 且不等于 mainSite 或 returnSite(两者都必须从结果中排除)

有什么提示吗?

编辑:感谢到目前为止的回复!我不确定它们是否有效,顺便说一句,必须对其进行测试,乍一看有些奇怪。

我自己找到了一个解决方案并且它完美地工作(不敢相信)但我认为应该有一个更“优雅”的方式来解决它(总是在 vb.net 中)。等待建议:)

        Dim resultSite As String

Try
resultSite = appEnums.Where(Function(x) x.Key > startSite _
AndAlso x.Key <> mainSite AndAlso x.Key <> returnSite) _
.OrderBy(Function(x) x.Key).Select(Function(x) x.Value).First()
Catch
resultSite = Nothing
End Try

最佳答案

这是一个稍微更精炼的 LINQ 语句。

Dim resultSite As String =
appEnums.OrderBy(Function(kvp) kvp.Key)
.SkipWhile(Function(kvp) kvp.Key <= startSite)
.Where(Function(kvp) kvp.Key <> mainSite AndAlso kvp.Key <> returnSite)
.Select(Function(kvp) kvp.Value).FirstOrDefault()

它在两个地方与您的解决方案不同:

  • 它首先使用OrderBy,这样它就可以使用SkipWhile
  • 它使用 FirstOrDefault 以避免难看的 try/catch block 。

关于VB.NET 和 LINQ 查询字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com