【问题标题】:How to continue on with a LINQ query如何继续使用 LINQ 查询
【发布时间】:2017-03-01 06:46:56
【问题描述】:

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

我该怎么做呢?

【问题讨论】:

  • 无法理解您的问题。请重新措辞以便于理解。
  • 你应该定义想要在以后选择更多更多。
  • .toList() 将显示所有字段。你想要选择你想要的字段吗?
  • 还有什么?一个学生的更多属性还是更多学生?
  • @Marco 一个学生的更多属性

标签: c# sql-server asp.net-mvc entity-framework linq


【解决方案1】:

您以错误的方式处理问题。如果您不知道要选择对象的哪些属性,为什么要选择子集?

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>

【讨论】:

  • 漂亮,我会测试一下,非常感谢!
  • 不要忘记声明您的 ViewModel 类,否则您将遇到另一个编译时错误;)
【解决方案2】:

如果您的查询仍然是延迟查询,我认为您可以在以后进行选择查询。

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 语句。
  • 抱歉我的错误,您可以在第一个查询中添加 select x。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多