我有一个名为学生的课程,它包括一个名字,以及一些对这个问题不重要的成绩。如何从List对象中按名称选择单个学生?
答案 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方法可以获取单个对象,例如Single
,SingleOrDefault
等。
如果您想获得符合条件的所有学生的集合,那么您可以这样做:
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
是参数。由于students
是List<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