3

以下の辞書の 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

ここで必要なのは、これらのルールを考慮して、SINGLE Web サイト (文字列型の辞書値) または NOTHING (クエリで手頃な結果が見つからない場合) を取得することです。

  • ディクショナリ キー (整数) は、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
4

2 に答える 2

4

これは、もう少し洗練された 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()

ソリューションとは 2 つの場所で異なります。

  • OrderBy使えるように、まず使うSkipWhile
  • 醜いブロックFirstOrDefaultを避けるように使います。try/catch
于 2012-05-29T21:18:36.723 に答える
-2

単一の Web サイトと言うとき、要件を満たす Web サイトの最初のものだけが必要ですか?

どうですか:

dim exclude = new string() {mainSite,returnSite}    

dim result = appEnums.Skip(startSite).Where(function(n) Not exclude.Contains(n.Key)).FirstOrDefault()
于 2012-05-23T21:06:37.197 に答える