首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VB.net中的LINQ语句

VB.net中的LINQ语句
EN

Stack Overflow用户
提问于 2014-04-23 13:31:45
回答 3查看 256关注 0票数 3

对于我的班级项目,我必须创建一个成绩册并编写LINQ语句,以列出所有学生,以升序显示,并显示通过测试的每个人。我的所有语句都返回相同的信息,这不应该是这样的。这是我的代码。

代码语言:javascript
运行
AI代码解释
复制
Public Class GradeBook
Private nameValue As String
Private scoreValue As Integer
Public Sub New(ByVal n As String, ByVal s As Integer)
    nameValue = n
    scoreValue = s
End Sub
Public Property Name() As String
    Get
        Return nameValue
    End Get
    Set(ByVal value As String)
        nameValue = value
    End Set
End Property

Public Property Score() As Integer
    Get
        Return scoreValue
    End Get
    Set(ByVal value As Integer)
        scoreValue = value
    End Set
End Property
Public Sub displayGradeBook()
    Console.WriteLine("Name: " & Name & vbTab & "Score: " & Score)
End Sub

End Class

 Sub Main()
    Dim g1 As New GradeBook("AAA", 70)
    Dim g2 As New GradeBook("BBB", 50)
    Dim g3 As New GradeBook("CCC", 100)
    Dim g4 As New GradeBook("DDD", 80)
    'add g1, g2, g3 and g4 in a array and display all student scores 
    Dim gradeBooks As GradeBook() = {g1, g2, g3, g4}
    display(gradeBooks, "Scores for all students: ")

    'create a LINQ which get all scores in ascending order and display them.
    Dim ascending =
        From value In gradeBooks
        Order By value Ascending
        Select value
    display(gradeBooks, "Ascending Order")


    'create a LINQ which get all students who passed the exam
    Dim passed =
        From gradeBook In gradeBooks
        Where gradeBook.Score > 60
        Order By gradeBook
        Select gradeBook
    display(passed, "Students who passed: ")



    'display number of passed students, their names and scores  




End Sub


'display gradeBook's information 
Private Sub display(ByVal gradeBooks As IEnumerable, ByVal header As String)
    Console.WriteLine(header)
    For Each g As GradeBook In gradeBooks
        g.displayGradeBook()
    Next
    Console.WriteLine()
    Console.ReadLine()

End Sub

End Module
EN

回答 3

Stack Overflow用户

发布于 2014-04-23 13:52:46

实现接口Icomparable,并将display(gradeBooks,升序)改为display(升序,升序)。

这段代码对我来说很有效。

代码语言:javascript
运行
AI代码解释
复制
Module Module1


    Public Class GradeBook
        Implements IComparable(Of GradeBook)

        Private nameValue As String
        Private scoreValue As Integer
        Public Sub New(ByVal n As String, ByVal s As Integer)
            nameValue = n
            scoreValue = s
        End Sub
        Public Property Name() As String
            Get
                Return nameValue
            End Get
            Set(ByVal value As String)
                nameValue = value
            End Set
        End Property

        Public Property Score() As Integer
            Get
                Return scoreValue
            End Get
            Set(ByVal value As Integer)
                scoreValue = value
            End Set
        End Property
        Public Sub displayGradeBook()
            Console.WriteLine("Name: " & Name & vbTab & "Score: " & Score)
        End Sub

        Public Function CompareTo(ByVal other As GradeBook) As Integer Implements System.IComparable(Of GradeBook).CompareTo
            '-1 = less than other; 0 = same as other; +1 = greater than other'
            If IsNothing(other) Then
                Return 1
            End If

            If Me.Score > other.Score Then
                Return 1
            End If

            If Me.Score < other.Score Then
                Return -1
            End If

            Return 0


        End Function

    End Class

    Sub Main()
        Dim g1 As New GradeBook("AAA", 70)
        Dim g2 As New GradeBook("BBB", 50)
        Dim g3 As New GradeBook("CCC", 100)
        Dim g4 As New GradeBook("DDD", 80)
        'add g1, g2, g3 and g4 in a array and display all student scores 
        Dim gradeBooks As GradeBook() = {g1, g2, g3, g4}
        display(gradeBooks, "Scores for all students: ")

        'create a LINQ which get all scores in ascending order and display them.
        Dim ascending =
            From value In gradeBooks
            Order By value Ascending
            Select value
        display(ascending, "Ascending Order")


        'create a LINQ which get all students who passed the exam
        Dim passed =
            From gradeBook In gradeBooks
            Where gradeBook.Score > 60
            Order By gradeBook
            Select gradeBook

        display(passed, "Students who passed: ")



        'display number of passed students, their names and scores  




    End Sub


    'display gradeBook's information 
    Private Sub display(ByVal gradeBooks As IEnumerable, ByVal header As String)
        Console.WriteLine(header)
        For Each g As GradeBook In gradeBooks
            g.displayGradeBook()
        Next
        Console.WriteLine()
        Console.ReadLine()

    End Sub

End Module
票数 2
EN

Stack Overflow用户

发布于 2014-04-23 13:52:54

对于按分数排序,您需要请求按分数排序

代码语言:javascript
运行
AI代码解释
复制
Dim ordered =
    From value In gradeBooks
    Order By value.Score
    Select value
display(ordered, "Ascending Order")

(我还更改了IEnumerable的名称,以避免与关键字“升序”混淆)

在提取传递的可枚举对象时也需要进行相同的更改

代码语言:javascript
运行
AI代码解释
复制
Dim passed =
    From gradeBook In gradeBooks
    Where gradeBook.Score > 60
    Order By gradeBook.Score
    Select gradeBook
display(passed, "Students who passed: ")

您的实际代码是将整个成绩册作为对象传递给order by。在这种情况下,您需要实现(如其他答案中所述) IEnumerable接口,以告诉编译器如何将一个成绩册与另一个成绩册进行比较,以便对它们进行排序。但这里可能并不真正需要这样做,只需将字段(数字或字符串)传递给排序依据就足够了

票数 0
EN

Stack Overflow用户

发布于 2014-04-23 14:03:55

您之所以看到相同的信息重复,是因为您在同一集合上调用了display两次。一旦纠正了这一点,你应该抛出一个异常,因为你正在尝试按整个对象排序,而不是按对象的属性/字段排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23245936

复制
相关文章
【Groovy】Groovy 方法调用 ( 使用 对象名.成员名 访问 Groovy 类的成员 | 使用 对象名.‘成员名‘ 访问类的成员 | 使用 对象名[‘成员名‘] 访问类成员 )
可以使用 对象名.‘成员名’ 访问 Groovy 类的成员 , 这样写的好处是 , 不用将代码写死 , 在运行时可以自由灵活的决定要访问哪个成员 ;
韩曙亮
2023/03/30
2.5K0
【Groovy】Groovy 方法调用 ( 使用 对象名.成员名 访问 Groovy 类的成员 | 使用 对象名.‘成员名‘ 访问类的成员 | 使用 对象名[‘成员名‘] 访问类成员 )
scala 隐式转换
Scala 中可以让函数库调用变得更加方便的隐式变换和隐式参数,以及如何通过它们来避免一些繁琐和显而易见的细节问题。 内容主要包括 implicits 的使用规则、隐含类型转换、转换被方法调用的对象等
全栈程序员站长
2022/11/10
1.1K0
scala隐式转换[通俗易懂]
在之前的章节中有使用到隐式转换:scala 使用jackson解析json成对象
全栈程序员站长
2022/11/08
7800
mysql 隐式类型转换_scala的隐式转换
在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引。下面分析两种隐式转换的情况
全栈程序员站长
2022/11/07
2K0
mysql 隐式类型转换_scala的隐式转换
Scala 【 14 隐式转换与隐式参数 】
​ Scala 的隐式转换,其实最核心的就是定义隐式转换函数,即 implicit conversion function 。
Lokinli
2023/03/09
8510
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )
在 ASTTransformation#visit 方法中 , 使用 source.AST 可以获取 Groovy 脚本的 AST 语法树节点 , 该节点是 ModuleNode 类型的 , 在一个 Groovy 脚本中可以定义多个 Class 类 , 其对应的 Class 语法树节点封装在了 ModuleNode 类的 List<ClassNode> classes = new LinkedList<ClassNode>(); 成员中 ;
韩曙亮
2023/03/30
9580
【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )
Scala基础——隐式转换
Scala的隐式转换,其实最核心的就是定义隐式转换函数,即implicitconversion function。定义的隐式转换函数,只要在编写的程序内引入,就会被Scala自动使用。Scala会根据隐式转换函数的签名,在程序中使用到隐式转换函数接收的参数类型定义的对象时,会自动将其传入隐式转换函数,转换为另外一种类型的对象并返回。这就是“隐式转换”。 通常建议将隐式转换函数的名称命名为“one2one”的形式。 隐式转换函数与普通函数唯一的语法区别就是,要以implicit开头,而且最好要定义函数返回类型。
羊羽shine
2019/08/16
7500
隐式转换函数_隐函数可以转化为显函数
隐式转换函数(implicit conversion function)是以implicit关键字声明的带有单个参数的函数,这样的函数将被自动应用,将值从一种类型转换为另一种类型。隐式转换函数叫什么名字是无所谓的,因为通常不会由用户手动调用,而是由Scala进行调用。但是如果要使用隐式转换,则需要对隐式转换函数进行导入。因此通常建议将隐式转换函数的名称命名为“one2one”的形式。 scala会考虑如下位置的隐式转换函数:
全栈程序员站长
2022/09/27
8910
Scala教程之:可扩展的scala
隐式类是在scala 2.10中引入的,隐式类指的是用implicit关键字修饰的类。在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换。
程序那些事
2020/07/07
1.3K0
Scala代码编写中常见的十大陷阱
很多Java开发者在学习Scala语言的时候,往往觉得Scala的语法和用法有些过于复杂,充满语法糖,太“甜”了。在使用Scala编写代码时,由于语法和编写习惯的不同,很多开发者会犯相同或相似的错误。一位Scala狂热爱好者近日总结了十大这样的错误,以供参考。 【51CTO精选译文】对于支持并发和分布式处理、高可扩展、基于组件的应用程序来说,Scala的功能是很强大的。它利用了面向对象和函数式程序设计的优点。这种基于Java虚拟机的语言在宣布Twitter正使用它时受到了最多的冲击(相关51CTO评论:从S
Albert陈凯
2018/04/04
1.1K0
[C#]如何访问及调用类中私有成员及方法
本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!
CNXY
2019/05/24
2.9K0
静态方法(类方法)与非静态方法(成员方法/实例方法)
(访问变量区别)非静态方法可以访问类中的任何成员(静态与非静态//方法与变量); 但静态方法只能访问静态成员(包括方法和变量)。 (被调用区别)非静态方法必须由实例对象来调用,而静态方法除了可由实例对象调用外,还可以由类名直接调用。 (super,this)非静态方法中可以使用super、this关键字,但在静态方法中不能使用super、this关键字。
用户9854323
2022/06/25
2.3K0
scala快速入门系列【隐式转换和隐式参数】
本篇作为scala快速入门系列的第三十七篇博客,为大家带来的是关于隐式转换和隐式参数的内容。
大数据梦想家
2021/01/26
9480
scala快速入门系列【隐式转换和隐式参数】
【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )
在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ;
韩曙亮
2023/10/11
4130
【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )
run timeimport : 成员变量、类、方法
runtime实现机制是什么,怎么用,一般用于嘛,你还能记得你所使用的相关头文件或者某些方法的名称吗? 回答:运行时机制,runtime库里面包含了跟类/成员变量/方法相关的API,比如获取类里面的所
且行且珍惜_iOS
2018/05/22
7130
Scala
  3、与过程化编程相⽐,函数式编程⾥的函数计算可以随时调⽤,函数式编程中,函数是⼀等公民
挽风
2023/10/17
2520
当网页图片不存在时不显示叉叉,显示默认图片的方法,管用的很!
有时候管理系统里面的产品图片没上传,或者因为网络原因传输过程中断了,图片没显示出来,就会显示一个叉叉,并且图片的占位符也不起作用了。昨晚上花了1个小时搜索、调试,验证了几种网络上的方法,最终有2种方法的确有效,鉴于代码优美的需要,我选择了如下一种。
崔文远TroyCui
2019/02/26
1.9K0
Spark基础-scala学习(八、隐式转换与隐式参数)
大纲 隐式转换 使用隐式转换加强现有类型 导入隐式转换函数 隐式转换的发生时机 隐式参数 隐式转换 要实现隐式转换,只要程序可见的范围内定义隐式转换函数即可。Scala会自动使用隐式转换函数。隐式转换函数与普通函数唯一的语法区别就是,要以implicit开头,而且一定要定义函数返回类型 案例:特殊售票窗口(只接受特殊人群,比如学生、老人等) scala> :paste // Entering paste mode (ctrl-D to finish) class SpecialPerson(val nam
老梁
2019/09/10
1.4K0
scala-sparkML学习笔记:迁移文件/ 通过 .!! 隐式方法直接执行系统命令
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
MachineLP
2019/11/14
4040
Scala:高阶函数、隐式转换(四)
scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是“头等公民”,它和Int、String、Class等其他类型处于同等的地位,可以像其他类型的变量一样被传递和操作。
Maynor
2021/12/07
6000
Scala:高阶函数、隐式转换(四)

相似问题

case类scala的隐式排序

26

scala类中的隐式应用方法

33

Scala -隐式类中的重载方法

118

对象中无法访问Scala隐式类成员。

14

当使用隐式类型类(方差+多态性)时,Scala无法访问getter方法。

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档