EBNF or BNF of LINQ?连接的结合性?其他条款吗?



我在寻找LINQ的BNF或EBNF。似乎c#的语法规范在任何地方都不容易获得,但是,如果没有找到,LINQ片段可能很容易推断。

特别是,我不能弄清楚join的优先级/结合性。注意,join可能包含嵌套查询,例如:

var result = from a in T 
join b in B on a.key equals b.key
join c in C on ??? 
where ... 
...

这是我到目前为止想到的语法:

<Query> ::= <From> <Body>
<Body> ::= <Clause>* <Conclusion> <Continutation>?
<Clause> ::= <From> | <Join> | <Let> | <Order> | <OrderBy>
<From> ::= "from " <Item> "in " <Source> 
<Join> ::= "join " <Item> "in " <Source> "on " <Key> "equals " <Key> ( "into " <Item> )?
<Let> ::= "let " <Item> " = " <Selection> 
<Order> ::= "where " <Condition> 
<OrderBy> ::= "orderby " ( <Key> ( "ascending " | "descending " )?)+
<Conclusion> ::=  <Select> | <Group> 
<Select> ::= " select " <Selection> 
<Group> ::= " group " <Selection> "by " <Key> 
<Continutation> ::= "into " <Item> <Body> 
<Item> ::= "x" [0-9]+ " "
<Source> ::= "DB" [0-9]+  <Id> " "
<Selection> ::= "new " "{ " <Fields> "} "
<Key> ::= "K" [0-9]+  <Id> " "
<Condition> ::= <And>
<And> ::= <Or> ( " && " <Or> )
<Or>  ::= <Not> ( " || " <Not> )
<Not> ::= " !"? ( "(" <Condition> ")" | <Comparison> )  
<Comparison> ::= <Value> ( "<" | ">" | "==" | "<=" | ">=" | "!=" ) <Value>
<Value> ::= <Key> | <Number>
<Number> ::= [0-0] | ( [1-9] [0-9]*  )
<Fields> ::= <Field> (", " <Field>)*
<Field> ::= "F" <Item>
<Id> ::= ( [a-z] | [A-Z] ) ( E | ( [0-9] | [A-Z] | [a-z] ) ) 

你可以在这里使用这个语法:https://bnfplayground.pauliankline.com/?bnf=%3CQuery%3E%20%3A%3A%3D%20%3CFrom%3E%20%3CBody%3E%0A%3CBody%3E%20%3A%3A%3D%20%3CClause%3E * % 3 cconclusion % 3 e % 20% 20% 3 ccontinutation % 3 e % 3 f % 0 a % 3 cclause % 3 e % 3 20% % % 3 d % 20% 3 cfrom 7 c % % 3 e % 20% 20% 3 cjoin % 3 e % 20% 7 c % 3 clet % 3 e % 20% 20% 7 c % 20% 3订单7 c % % 3 e % 20% 20% 3 corderby % 3 e % 0 a % 3 cfrom % 3 3 3 e % 20% % % 3 d % 22 20% % 20% 22% 20% 3 citem % 3 e % 22 20% % 20% 22% 20% 3 csource % 3 e % % 3 cjoin 0 20% % % 3 3 3 e % 20% 20% % 3 d % 22加入% 20% 22% 20% 3 citem % 3 e % % 20% 22% 20% 20%的22 3 csource % 3 e % 22 20% % 3 ckey % 3 e % 20% 20% 22% 20% 22情商ual % 20% 22% 20% 3 ckey % 3 e % 20 (% 22 20% % 20% 22% 20% 3 citem % 3 e % 20) % 3 f % 0 a % 3 clet % % 3 3 3 e % 20% 20% % 3 d % 22让% 20% 22% 20% 3 citem % 3 e % 3 d % 20% 22% 20% 20% 22% 20% 3 cselection % 3 e % 0一% 3订单20% % % 3 3 3 e % 20% % 3 d % 22 % 20% 20% 22% 20% 3 ccondition % 3 e % % 3 corderby 0 20% % % 3 3 3 e % 20% 20% % 3 d % 22 orderby % 20% 22% 20 (% 20% 3 ckey % 3 e % 20(% 22提升% 20% 22% 20% 20% 7 c % 22下降20% % 20)20% - 22% % 3 f) % 2 b % 0 a % 3 cconclusion % 3 e % 3 20% % % 3 d % 20% 20% 3 cselect 7 c % % 3 e % 20% 20% 3 cgroup % 3 e % % 3 cselect 0 20% % % 3 3 3 e % 20% 20选择% % 3 d % 20% 22% 20% 22% 20% 3 cselection % 3 e % 0 20% % 3 cgroup % 3 e %3 20% % % 3的3 d % 20集团% 20% 22% 22% 20% 20% 3 cselection % 3 e % 22 20% % 20% 22% 20% 3 ckey % 3 e % % 3 ccontinutation 0 20% % % 3 3 3 e % 20% 20% % 3 d % 22到% 3 citem % 3 e % 20% 20% 22% 20% 3 cbody % 3 e % % 3 citem 0 20% % % 3 3 3 e % 20% 20% % 3 d % 22 x % 22% 20% 5 b0-9 % 5 d % 2 b % 20% 22% 20% 22% 0 20% % 3 csource % 3 e % % 3 3 22分贝% % 3 d % 20% 22% 20% 5 b0-9 % 5 d % 2 b % 3 cid % 3 e % 20% 20% 20% 22% 20% 22% 0 a % 3 cselection % % 3 3 3 e % 20% 20% % 3 d % 22新7 b % % 20% 22% 20% 22% 20% 22% 20% 3 cfields % 3 e % 20% 22% 7 d % 0 a 20% - 22% % 3 ckey % % 3 3 3 e % 20% 20% % 3 d % 22 k % 22% 20% 5 b0-9 % 5 d % 2 b % 3 cid % 3 e % 20% 20% 20% 22% 20% 22% 0 a % 3 ccondition % 3 e % 3 20% % % 3 d % 20% 3nd % 3 e % 0 a % 3萤石% % 3 3 3 e % 20% 20% % 3 d %和% 3 e % 20(% 20% 22% 20% 26% 26% 20% 22% 20%和% 3 e % 20) % 0 a %和% 3 e % 3 20% - 20% % % 3 d % 20% 3把cnot % 3 e % 20 (% 7 c % 7 c % 20% 22% 20% 20% 22% 20% 3把cnot % 3 e % 20) % 0 a % 3把cnot % % 3 3 3 e % 20% % 3 d % 20% 22% 20 ! % 22% 3 f % 20 (20% % 22 (% 3 ccondition % 3 e % 20% 22% 20% 22) % 22% 20% 7 c % 20% 3 ccomparison % 3 e % 20) % 0 a 20% - 20% % 3 ccomparison % 3 e % 3 20% % % 3 d % 20% 3 cvalue % 3 e % 20 (3 c % % 20% 22% 22% 20% 7 c % 20% 22% 3 e % 22% 20% 7 c % 20% 22% 3 d % 3 d % 22% 20% 7 c 3 c % 3 d % % 20% 22% 22% 20% 7 c % 20% 22% 3 e % 3 d % 22% 20% 7 c % 20% 22 ! % 3 d % 20) 22% % 20% 3 cvalue % 3 e % 0 a % 3 cvalue % 3 e % 3 20% % % 3 d % 20% 3 ckey 7 c % % 3 e % 20%3 cnumber % 3 e % 0 20% % 3 cnumber % % 3 3 3 e % 20% 20% % 3 d % 5 b0-0 % 5 d % 20% 7 c % 20 (% 5 b1-9 % 5 d % 20% 20% 5 b0-9 % 5 d * % 20% 20) % 0 a % 3 cfields % 3 e % 3 20% % % 3 d % 20% 3 cfield % 3 e % 20 (% 22% 2 c % 20% 22% 20% 3 cfield % 3 e) * % 0 a % 3 cfield % % 3 3 3 e % 20% 20% % 3 d % 22 f % 22% 20% 3 citem % 3 e % 0 a % 3 cid % 3 3 3 e % 20% % % 3 d % 20 (% 20% 5 ba-z 7 c % % 5 d % 20% 20% 5 ba-z % 5 d % 20) % 20 (% 20 e % 20% 7 c % 20 (% 5 b0-9 % 5 d % 20% 20% 7 c % 20% 5 ba-z 7 c % % 5 d % 20% 20% 5 ba-z % 5 d % 20) % 20) % 20,真正name = % 20数字

例如,您可以基于此语法生成示例查询。

此文档指定查询语法:

query_expression
: from_clause query_body
;
from_clause
: 'from' type? identifier 'in' expression
;
query_body
: query_body_clauses? select_or_group_clause query_continuation?
;
query_body_clauses
: query_body_clause
| query_body_clauses query_body_clause
;
query_body_clause
: from_clause
| let_clause
| where_clause
| join_clause
| join_into_clause
| orderby_clause
;
let_clause
: 'let' identifier '=' expression
;
where_clause
: 'where' boolean_expression
;
join_clause
: 'join' type? identifier 'in' expression 'on' expression 'equals' expression
;
join_into_clause
: 'join' type? identifier 'in' expression 'on' expression 'equals' expression 'into' identifier
;
orderby_clause
: 'orderby' orderings
;
orderings
: ordering (',' ordering)*
;
ordering
: expression ordering_direction?
;
ordering_direction
: 'ascending'
| 'descending'
;
select_or_group_clause
: select_clause
| group_clause
;
select_clause
: 'select' expression
;
group_clause
: 'group' expression 'by' expression
;
query_continuation
: 'into' identifier query_body
;

最新更新