如何继续LINQ查询

时间:2017-03-01 06:46:56

标签: c# sql-server asp.net-mvc entity-framework 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 个答案:

答案 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
            }