尝试使用linq命令对象列表时获取无效的强制转换异常

xxy*_*yxx 5 linq vb.net sorting

我正在尝试排序一个推文列表(类:SimpleTweet),每个推文都有与之关联的ID(x.ID,其中x是类SimpleTweet的对象).我正在使用linq对此进行排序,使用"OrderByDescending",但是在我设置List(Of SimpleTweet)类型的新对象等于排序列表的行上出现错误.我得到的错误是,"System.InvalidCastException:无法转换类型为'System.Linq.OrderedEnumerable 2[SimpleTweet,System.Int64]' to type 'System.Collections.Generic.List1 [SimpleTweet]'"的对象.

代码:

 <WebMethod()> _
    Public Function GetTweetsByUserID(ByVal userID As Integer) As List(Of SimpleTweet)
        Dim result As New List(Of SimpleTweet)
        Dim urlTwitter As String = "https://api.twitter.com/1/statuses/user_timeline.xml?include_entities=true&include_rts=true&screen_name={0}&count=3"
        'Dim twitterfeed As String = utils.GetUserTwitterFeeds(userID, "docphin")
        Dim lq As New lqDFDataContext
        Dim var = lq.web_GetTweetsByUserID(userID).ToList()
        Dim sortedresult As New List(Of SimpleTweet)
        If Not var Is Nothing Then
            For Each twitterfeed In var

                Dim listURL As String = String.Format(urlTwitter, twitterFeed.TweeterFeed)

                Dim tweetXML As XmlDocument = utils.GetXMLForURL(listURL)

                Dim tweetnodelist As XmlNodeList = tweetXML.ChildNodes(1).ChildNodes

                For Each node As XmlNode In tweetnodelist
                    Dim tweet As New SimpleTweet
                    tweet.CreatedAt = node.SelectSingleNode("created_at").InnerText
                    tweet.HTMLText = utils.ReturnTextWithHRefLink(node.SelectSingleNode("text").InnerText)
                    tweet.ID = node.SelectSingleNode("id").InnerText
                    tweet.Name = node.SelectSingleNode("user/name").InnerText
                    tweet.ScreenName = node.SelectSingleNode("user/screen_name").InnerText
                    tweet.Text = node.SelectSingleNode("text").InnerText
                    tweet.UserID = node.SelectSingleNode("user/id").InnerText
                    tweet.ProfileImageURL = node.SelectSingleNode("user/profile_image_url_https").InnerText
                    result.Add(tweet)
                Next
            Next

        sortedresult = result.OrderByDescending(Function(tweet) tweet.ID)  
        End If
        Return sortedresult
    End Function
Run Code Online (Sandbox Code Playgroud)

Chr*_*tte 8

您需要result通过调用来实现.ToList().将它添加到此行的末尾:

sortedresult = result.OrderByDescending(Function(tweet) tweet.ID)
Run Code Online (Sandbox Code Playgroud)

sortedResult是类型List(Of SimpleTweet)OrderByDescending返回一个IOrderedEnumerable(Of SimpleTweet)不能自动转换为期望类型的.

  • 谢谢你,@becksftw。我希望你在 SO 上的第一个月是一段愉快的经历。如果答案解决了您的问题,请不要忘记将答案标记为已接受。 (2认同)