我有一个linq查询:
var list = (from x in db.students
where x.name== student_name
select new
{
x.date,
x.Student_id
}
我还不想执行.toList()
查询,我想在稍后阶段选择学生的更多属性,例如:
x.student_age
x.student_name
稍后阶段。
例如,添加到var列表:
var list = (from x in db.students
where x.name== student_name
select new
{
x.date,
x.Student_id
x.student_age
x.student_name
}.toList();
我该怎么办呢?
答案 0 :(得分:5)
你正在以错误的方式解决问题。如果你不知道,你想要选择一个对象的属性,为什么要选择一个子集?
var list = (from x in db.students
where x.name== student_name
select x);
此时,您还没有实现查询。它仍然是IQueryable<T>
。
现在,当您知道需要哪些属性时,您仍然可以选择匿名对象,或者最好选择ViewModel类:
list = list.Select(x => new StudentViewModel {
Id = x.Id,
Name = x.Name,
/* ....*/
});
如果你想使用匿名对象,那就是:
list = list.Select(x => new {
Id = x.Id,
Name = x.Name,
/* ....*/
});
现在,当您致电list.ToList()
时,它已实现并执行查询。您的IQueryable<T>
成为IEnumerable<T>
答案 1 :(得分:0)
如果您的查询仍然是延迟查询,我认为您可以在稍后阶段进行选择查询。
var list = from x in db.students
where x.name == student_name
然后在下一阶段:
var list1 = from x in list
select new
{
x.date,
x.student_id
x.student_age
x.student_name
}