Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq.Except的更多“SQL语法”_C#_Linq_Syntax - Fatal编程技术网

C# Linq.Except的更多“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()

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[] 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;