我是C#的新手,我知道如何对具有一个字段/类型的列表进行LINQ搜索,但是对于对象的许多类型却不行。我创建了一个列表
List<Reader> results = new List<Reader>();
包含此类:
public class Reader
{
public int ID { get; set; }
public string Name { get; set; }
public string Course { get; set; }
public int Grade { get; set; }
public Reader(int id, string name, string course, int grade)
{
ID = id;
Name = name;
Course = course;
Grade = grade;
}
}
我想用LINQ搜索它,并匹配进入该站点的用户的ID
和Name
。
如果这两个字段相同,我想从列表中获取用户Course
和Grade
。
任何建议怎么做?
答案 0 :(得分:2)
用于条件的简单Where
和用于表示的Select
应该做:
List<Reader> results = ...
var data = results
.Where(item => item.ID == userID && item.Name == userName)
// .OrderBy(item => item.Course) // uncomment if you want to order by course
.Select(item => $"Course: {item.Course} Grade: {item.Grade}");
foreach (var record in data)
Console.WriteLine(record);
答案 1 :(得分:1)
首先,我们假设您有两个变量来保存用户引入的值。这些变量是字符串类型的userName和整数类型的id。如果您只想要一个包含课程和成绩的变量,则可以选择一个新的匿名类型并执行以下查询:
var values= results
.Where(item => item.ID == userID && item.Name == userName)
.Select(item => new { Course = item.Course, Grade = item.Grade });
然后您可以使用以下值:
values.Grades
values.Course
答案 2 :(得分:0)
var Selecteduser = results.Where(x => x.Name == selectedname && x.ID == ID).ToList();
if (Selecteduser.Count != 0)
{
//found match ..(Selecteduser[0])
string selectedcourse = Selecteduser[0].Course;
int selectedgrade = Selecteduser[0].Grade;
}
else
{
//coudlnt find match
}