代码之家  ›  专栏  ›  技术社区  ›  Daniel Spiewak

Linq to SQL是否支持可组合查询?

  •  5
  • Daniel Spiewak  · 技术社区  · 16 年前

    作为一个不懂C语言的程序员,我很好奇Linq查询的评估语义,如下所示:

    var people = from p in Person
                 where p.age < 18
                 select p
    
    var otherPeople = from p in people
                      where p.firstName equals "Daniel"
                      select p
    

    假设 Person 是定义 age firstName 字段,从数据库的角度来看,这会做什么?具体来说, people 运行查询以生成内存中的结构,然后由 otherPeople 查询?或者是 其他人 只需从 然后生成一个新的数据库对等查询?所以,如果我对这两个查询进行迭代,会执行多少SQL语句?

    5 回复  |  直到 16 年前
        1
  •  12
  •   Judah Gabriel Himango    16 年前

        2
  •  3
  •   Michael L Perry    16 年前

        3
  •  3
  •   Ant    16 年前
    var people = from p in Person
                 where p.age < 18
                 select p
    

    SELECT [t0].[PersonId], [t0].[Age], [t0].[FirstName]
    FROM [dbo].[Person] AS [t0]
    WHERE [t0].[Age] < @p0
    

    var otherPeople = from p in people
                      where p.firstName equals "Daniel"
                      select p
    

    SELECT [t0].[PersonId], [t0].[Age], [t0].[FirstName]
    FROM [dbo].[Person] AS [t0]
    WHERE [t0].[FirstName] = @p0
    

    var morePeople = from p1 in people
                     from p2 in otherPeople
                     where p1.PersonId == p2.PersonId
                     select p1;
    

    SELECT [t0].[PersonId], [t0].[Age], [t0].[FirstName]
    FROM [dbo].[Person] AS [t0], [dbo].[Person] AS [t1]
    WHERE ([t0].[PersonId] = [t1].[PersonId]) AND ([t0].[Age] < @p0) AND ([t1].[FirstName] = @p1)
    

        4
  •  1
  •   David Thibault    16 年前

    people otherPeople IQueryable<Person>

    .ToList() List<Person>

        5
  •  0
  •   dimarzionist    16 年前