none
如何將Linq運算子由C#轉成VB.net RRS feed

  • 問題

  • :::請問各位,以下程式裡宣告query的部份(包含等號之後的Linq語法)該如何轉成VB.net???謝謝!!!

     

            static void Main(string[] args)
            {

                List<int> monthList = new List<int>()
                { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

     

                IEnumerable<IGrouping<int, int>> query =
                    from month in monthList
                    group month by checkMonth(month) into o
                    orderby o.Key
                    select o ;

     

                foreach (var group in query)
                {
                    Console.WriteLine(group.Key > 30 ? "\n大月:" : "\n小月:");
                    foreach (int i in group)
                        Console.Write(i + "-" + group.Key.ToString() + "  ");
                }
                Console.ReadLine();
            }
            private static int checkMonth(int month)
            {
                int resultDays;
                resultDays = DateTime.DaysInMonth(2008, month);
                return resultDays;
            }

    2008年5月1日 上午 09:58

解答

  • 試看看:

     

    Code Snippet

    IEnumerable(Of IGrouping(Of int, Of int)) query = _
        From month In monthList _
        Group month By checkMonth(month) into o _
        Order By o.Key _
        Select o

     

     

    但建議你用:

     

    Code Snippet

    Dim query = _
        From month In monthList _
        Group month By checkMonth(month) into o _
        Order By o.Key _
        Select o

     

     

    以上語法未經測試,可能還要調整一下 ...
    2008年5月1日 上午 10:08
    版主

所有回覆

  • 試看看:

     

    Code Snippet

    IEnumerable(Of IGrouping(Of int, Of int)) query = _
        From month In monthList _
        Group month By checkMonth(month) into o _
        Order By o.Key _
        Select o

     

     

    但建議你用:

     

    Code Snippet

    Dim query = _
        From month In monthList _
        Group month By checkMonth(month) into o _
        Order By o.Key _
        Select o

     

     

    以上語法未經測試,可能還要調整一下 ...
    2008年5月1日 上午 10:08
    版主
  • :::小朱大大給的第一種方式,小女子改成如下:

    Dim query As IEnumerable(Of IGrouping(Of Integer, Integer)) = _
        From month In monthList _
        Group month By days = checkMonth(month) Into o() _
        Order By o.Key _
        Select o

    但是會有錯誤訊息:

    在此內容無法存取方法 'o' 的定義。

     

    第二種方式也會出現以上的錯誤訊息!!!


     

    2008年5月1日 上午 10:13
  • 那個 o 應該是匿名變數,而不是方法 ...

    也就是沒有 "()"

     

    2008年5月1日 上午 10:21
    版主
  • :::那個( )是VB.net自動加上去的!!!

    2008年5月1日 上午 10:26
  • 不好意思,老文重貼。

     

    我今天剛好也遇見類似的困擾。

    如同小琳網友所言,改成VB語法。 Group By最後的 Into   o  他一定會自動加上  ()

    然後就是那裡出錯。

    Dim query As IEnumerable(Of IGrouping(Of Integer, Integer)) = _
    From month In monthList _
    Group month By days = checkMonth(month) Into o() _
    Order By o.Key _
    Select o

    -----------------------------------------------------------------------------------------------

    微軟MSDN範例,通常會有VB、C#兩種範例,但偏偏這一篇沒有。

    http://msdn.microsoft.com/zh-tw/library/bb397900(v=VS.100).aspx#Y2227

     

    好死不死,其中一個範例,我怎樣都改不成VB語法。

            var studentQuery4 =
                            from student in students
                            group student by student.Last[0] into studentGroup
                            orderby studentGroup.Key
                            select studentGroup;

            Label2.Text = "使用學生姓氏的第一個字母當做索引鍵,將學生分組。<br />";

            foreach (var groupOfStudents in studentQuery4)
            {
                Label2.Text += "<hr />groupOfStudents.Key --" + groupOfStudents.Key + "<br />";
                foreach (var student in groupOfStudents)
                {
                    Label2.Text += String.Format(" {0}, {1}", student.Last, student.First) + "<br />";
                }
            }

     

     

    最後 "勉強" 做出類似的成果(VB語法如下)

            Dim studentQuery4 =
                            From student In students
                            Group student By student.Last.First Into Group
                            Select Group

            Label2.Text = "使用學生姓氏的第一個字母當做索引鍵,將學生分組。<br />"

            For Each groupOfStudents In studentQuery4
                Label2.Text &= "<hr />groupOfStudents.Key --" & groupOfStudents.Last.Last.First & "<br />"
                For Each student In groupOfStudents
                    Label2.Text &= String.Format(" {0}, {1}", student.Last, student.First) & "<br />"
                Next
            Next

     

    上面範例的 Class型態等等,都在這篇文章一開始有提及。

    http://msdn.microsoft.com/zh-tw/library/bb397900(v=VS.100).aspx#Y2227

     

    如果有高手能指點一下,實在是萬分感激。

    到底....對應的VB語法該是怎麼樣,作了一整個下午都無法完成呢。

    Thanks.


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/
    2011年7月8日 上午 10:30
  • hi
    試了一下 由於 不能直接用 student.Left(0)
    所以加了Let子句進去
        Dim studentQuery4 =
            From student In students
            Let Left = student.Last(0)
            Group student By Left Into studentGroup = Group
            Order By Left
    
        Label2.Text = "使用學生姓氏的第一個字母當做索引鍵,將學生分組。<br />"
    
        For Each groupOfStudents In studentQuery4
          Label2.Text &= "<hr />groupOfStudents.Key --" & groupOfStudents.Left & "<br />"
          For Each student In groupOfStudents.studentGroup
            Label2.Text &= String.Format(" {0}, {1}", student.First, student.Last) & "<br />"
          Next
        Next
    
    
     

    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年7月9日 上午 06:01