如何从自定义类列表中获取对象?

时间:2016-04-27 15:34:29

标签: c# asp.net linq

我有一个名为学生的课程,它包括一个名字,以及一些对这个问题不重要的成绩。如何从List对象中按名称选择单个学生?

5 个答案:

答案 0 :(得分:3)

students.FirstOrDefault(s => s.Name == studentName);

答案 1 :(得分:1)

`
import os
import sys

from django.core.wsgi import get_wsgi_application
sys.path.append('home/adminrfaapp/rfaapp')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rfaapp.settings")

application = get_wsgi_application()
`

答案 2 :(得分:1)

有很多方法可以做到这一点。最简单的是使用如下的循环:

List<Student> list = new List<Student>();
Student matchedStudent = null;
string inputStudentName = "SomeName";
foreach (var student in list)
{
    if (String.Equals(inputStudentName, student.Name, StringComparison.CurrentCultureIgnoreCase))
    {
        matchedStudent = student;
        break;
    }
}

if (matchedStudent != null)
{
    //student found
}

你也可以使用 LINQ FirstOrDefault

matchedStudent = list.FirstOrDefault(s => String.Equals(inputStudentName, s.Name, StringComparison.CurrentCultureIgnoreCase));

还有其他LINQ方法可以获取单个对象,例如SingleSingleOrDefault等。

如果您想获得符合条件的所有学生的集合,那么您可以这样做:

var matchedStudentCollection = list.Where(s => String.Equals(inputStudentName, s.Name, StringComparison.CurrentCultureIgnoreCase));

最好从循环开始,然后阅读更多关于LINQ的内容,您将能够使用LINQ编写更简洁,更优雅的代码。

答案 3 :(得分:1)

如果您想开始学习LINQ,可以从这里开始:Basic LINQ Query Operations

var student = students.FirstOrDefault(s => s.Name == searchName);

这个表达式是&#34; lambda表达式&#34;:

s => s.Name == searchName

这是一个匿名函数。它会被列表中的每个项目调用。为了使它更清晰,你可以写

(Student s) => s.Name == searchName

s是参数。由于studentsList<Student>,编译器可以推断出参数的类型。

在常规C#中,您可以这样写 - 但是使用这种函数定义,它无法访问局部变量searchName,因此您必须这样做使这项工作变得笨拙的事情。 lambda表达式可以&#34;看&#34;它定义的所有局部变量,简化了一切。

function bool Predicate(Student s) {
    return s.Name == searchName;
}

FirstOrDefault可能会返回null。

如果你想对失踪的学生或多余的学生姓名(在学生的特定情况下听起来像个坏主意)抛出异常,你只需要一个匹配:

var student = students.Single(s => s.Name == searchName);

如果可能有几个,你想要它们全部,

var studentEnumeration = students.Where(s => s.Name == searchName);

那将返回一个你可以遍历的查询:

foreach (var student in studentEnumeration) {
    //  Rap each student on the knuckles with a ruler
}

答案 4 :(得分:0)

StudentList成为您在代码中维护的students(学生对象)列表。考虑您要根据他/她的名字选择第一名学生。然后你可以使用List .FirstOrDefault,它为你提供满足给定条件的第一个匹配的学生对象:如果你需要获取所有名字将等于搜索文本的学生,你可以使用List {{3 }}

List<student> StudentList = new List<student>();
//TODO: Populate the List here 

string searchName = "luckey";

student FirstStudent = StudentList
  .FirstOrDefault(x => String.Equals(searchName, 
                                     x.Name,
                                     StringComparison.CurrentCultureIgnoreCase));

// first student whose name is luckey
List<student> searchResult = StudentList
  .Where(x => String.Equals(searchName, 
                            x.Name,       
                            StringComparison.CurrentCultureIgnoreCase))
  .ToList();
//sub list of students whose name is luckey