C# Linq.Except的更多“SQL语法”
Linq中的大多数表达式可以写成两个语法。 基本上是方法语法和类似SQL的语法 例如: 方法语法: var results=MySet.Wheren=>n.Status==State.ACTIVE 类似SQL的语法: var results=来自MySet中的n,其中n.Status==State.ACTIVE选择n 我想使用。除了在类似SQL的语法中,但只能在线找到在方法语法中使用它的示例 例如:C# Linq.Except的更多“SQL语法”,c#,linq,syntax,C#,Linq,Syntax,Linq中的大多数表达式可以写成两个语法。 基本上是方法语法和类似SQL的语法 例如: 方法语法: var results=MySet.Wheren=>n.Status==State.ACTIVE 类似SQL的语法: var results=来自MySet中的n,其中n.Status==State.ACTIVE选择n 我想使用。除了在类似SQL的语法中,但只能在线找到在方法语法中使用它的示例 例如: int[] numbers = Enumerable.Range(1,20).ToArray()
int[] numbers = Enumerable.Range(1,20).ToArray();
int[] primes = new[] { 2, 3, 5, 7, 11, 13, 17 };
//var composites = from n in numbers select n except primes; // This does not work.
var composites = numbers.Except(primes); // This works
return composites;
问题
我所说的方法语法和类似SQL的语法有正式名称吗?
有没有办法在except操作上执行类似SQL的语法
我称之为form和SQL之类的方法有正式名称吗
语法
是的,一个是方法语法,另一个类似SQL的是查询语法,查询表达式是用查询sytnax编写的
查询表达式是用声明性查询语法编写的
在C3.0中引入
见:
关于你的另一个问题:
有没有办法在except操作上执行类似SQL的语法
没有。除了查询语法之外,我没有看到其他
见:
介绍性语言中的大多数查询都集成了查询LINQ
文档是使用LINQ声明性查询语法编写的。
但是,必须将查询语法转换为
编译代码时.NET公共语言运行库CLR。这些
方法调用调用具有名称的标准查询运算符
例如Where、Select、GroupBy、Join、Max和Average。你可以
使用方法语法而不是查询语法直接调用它们
因此,您似乎只能在查询语法中使用Where、Select、GroupBy、Join、Max和Average 在C中支持LINQ语法的方法只有:
Where // where
Select // select / let
SelectMany // from
Join // join
GroupBy // group by
GroupJoin // join into
甚至不是所有的过载。对于其他的事情,你必须自己调用这些方法
使用LINQ语法执行查询的唯一方法是交换GroupJoin以外的内容:
不过,这可能不值得,因为它的效率会有所降低,而且对于那些没有掌握LINQ的人来说,可能无法立即理解
F支持更大的一组。希望他们能将其中的一部分带到C中。您可以尝试查询和方法语法的组合
var numbers = Enumerable.Range(1, 20).ToArray();
var primes = new[] { 2, 3, 5, 7, 11, 13, 17 };
var composites = from n in numbers
where !(primes.Contains(n))
select n;
它看起来像是“查询语法”。为什么要使用查询语法?Max和Average不能在C中的查询语法中使用。但是它们可以在VB中使用,这可能是该错误的根源。
var numbers = Enumerable.Range(1, 20).ToArray();
var primes = new[] { 2, 3, 5, 7, 11, 13, 17 };
var composites = from n in numbers
where !(primes.Contains(n))
select n;