===================================== Query from select ===================================== var x = from a in source select a.B; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (select_clause (member_access_expression (identifier) (identifier))))))))) ===================================== Query from select projection ===================================== var x = from a in source select { Name = a.B }; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (select_clause (initializer_expression (assignment_expression (identifier) (assignment_operator) (member_access_expression (identifier) (identifier))))))))))) ===================================== Query from select with where ===================================== var x = from a in source where a.B == "A" select a; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (where_clause (binary_expression (member_access_expression (identifier) (identifier)) (string_literal))) (select_clause (identifier)))))))) ===================================== Query from select with where and projection ===================================== var x = from a in source where a.B == "A" && a.C == "D" select new { Name = a.B }; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (where_clause (binary_expression (binary_expression (member_access_expression (identifier) (identifier)) (string_literal)) (binary_expression (member_access_expression (identifier) (identifier)) (string_literal)))) (select_clause (anonymous_object_creation_expression (name_equals (identifier)) (member_access_expression (identifier) (identifier)))))))))) ===================================== Query from select with orderby ===================================== var x = from a in source orderby a.A descending orderby a.C ascending orderby 1 select a; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (order_by_clause (member_access_expression (identifier) (identifier))) (order_by_clause (member_access_expression (identifier) (identifier))) (order_by_clause (integer_literal)) (select_clause (identifier)))))))) ===================================== Query from select with let ===================================== var x = from a in source let z = new { a.A, a.B } select z; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (let_clause (identifier) (anonymous_object_creation_expression (member_access_expression (identifier) (identifier)) (member_access_expression (identifier) (identifier)))) (select_clause (identifier)))))))) ===================================== Query from select with join ===================================== var x = from a in sourceA join b in sourceB on a.FK equals b.PK select new { A.A, B.B }; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (join_clause (identifier) (identifier) (member_access_expression (identifier) (identifier)) (member_access_expression (identifier) (identifier))) (select_clause (anonymous_object_creation_expression (member_access_expression (identifier) (identifier)) (member_access_expression (identifier) (identifier)))))))))) ===================================== Query from select with multiple from ===================================== var x = from a in sourceA from b in sourceB where a.FK == b.FK select new { A.A, B.B }; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (from_clause (identifier) (identifier)) (where_clause (binary_expression (member_access_expression (identifier) (identifier)) (member_access_expression (identifier) (identifier)))) (select_clause (anonymous_object_creation_expression (member_access_expression (identifier) (identifier)) (member_access_expression (identifier) (identifier)))))))))) ===================================== Query from select with group by & continuation ===================================== var x = from a in sourceA group a by a.Country into g select new { Country = g.Key, Population = g.Sum(p => p.Population) }; --- (compilation_unit (field_declaration (variable_declaration (implicit_type) (variable_declarator (identifier) (equals_value_clause (query_expression (from_clause (identifier) (identifier)) (group_clause (identifier) (member_access_expression (identifier) (identifier))) (query_continuation (identifier) (select_clause (anonymous_object_creation_expression (name_equals (identifier)) (member_access_expression (identifier) (identifier)) (name_equals (identifier)) (invocation_expression (member_access_expression (identifier) (identifier)) (argument_list (argument (lambda_expression (identifier) (member_access_expression (identifier) (identifier)))))))))))))))