如何继续使用LINQ查询
我有一个LINQ查询:如何继续使用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();
我应该如何去这样做呢?
您正在以错误的方式处理问题。如果你不知道,你想选择一个对象的属性,为什么你会选择一个子集呢?
var list = (from x in db.students
where x.name== student_name
select x);
此时,您尚未实现您的查询。它仍然是一个IQueryable<T>
。 现在,当你知道你需要哪些属性,你仍然可以做一个选择到一个匿名对象,或preferrably一个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>
美丽,我会测试一下,非常感谢你! –
不要忘记声明你的ViewModel类,否则你将运行到另一个编译时错误;) – Marco
我认为你可以在稍后的阶段做选择查询,如果你的查询仍然是延迟查询。
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
}
这将无法编译。查询语法要求您有一个select语句。 – Marco
对不起,我可以在第一个查询中添加选择x。 –
无法理解你的问题。请重新说明它以获得更多的可理解性。 –
您应该定义**希望在稍后阶段选择更多**。 –
'.toList()'会显示所有字段。你想要选择你想要的领域吗? – vanloc