2017-03-01 85 views
-2

我有一个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(); 

我应该如何去这样做呢?

+2

无法理解你的问题。请重新说明它以获得更多的可理解性。 –

+1

您应该定义**希望在稍后阶段选择更多**。 –

+0

'.toList()'会显示所有字段。你想要选择你想要的领域吗? – vanloc

回答

5

您正在以错误的方式处理问题。如果你不知道,你想选择一个对象的属性,为什么你会选择一个子集呢?

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>

+0

美丽,我会测试一下,非常感谢你! –

+1

不要忘记声明你的ViewModel类,否则你将运行到另一个编译时错误;) – Marco

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 
      } 
+0

这将无法编译。查询语法要求您有一个select语句。 – Marco

+0

对不起,我可以在第一个查询中添加选择x。 –