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/sql)_C#_Linq - Fatal编程技术网

C# 我在用什么?(Linq/sql)

C# 我在用什么?(Linq/sql),c#,linq,C#,Linq,我的项目目前使用“linq”的以下语法 据说上面的代码是linq,由于不知道linq,我决定学习它。然而,从一开始,情况就大不相同了 我的代码中使用了什么?它是linq的一个版本吗?是别的吗 您使用的是LINQ。有两种不同的符号可用于编写LINQ-Lambda语法和查询语法 区别在这里解释如下: 有关MSDN的更多信息,请参见: MSDN文章开始用类似SQL的语法(“查询语法”)解释LINQ,然后继续解释Lambda表达式和表达式树(“lamba语法”)。这是查询的扩展方法语法。.Query()

我的项目目前使用“linq”的以下语法

据说上面的代码是linq,由于不知道linq,我决定学习它。然而,从一开始,情况就大不相同了


我的代码中使用了什么?它是linq的一个版本吗?是别的吗

您使用的是LINQ。有两种不同的符号可用于编写LINQ-Lambda语法查询语法

区别在这里解释如下:

有关MSDN的更多信息,请参见:


MSDN文章开始用类似SQL的语法(“查询语法”)解释LINQ,然后继续解释Lambda表达式和表达式树(“lamba语法”)。

这是查询的扩展方法语法。
.Query().WithFullReadCheck()
不太常见,但其余的
.Where
.FirstOrDefault
是非常常见的查询扩展。LINQ是一种特殊语法,用于表达与链接查询扩展方法相同的内容。在幕后,他们是一模一样的


请看这个问题,它给出了LINQ和扩展方法语法的示例,并很好地讨论了它们之间的差异:

LINQ是“语言集成查询”。实际上,对大多数人来说,这意味着两件事:

编译器将内联委托转换为表达式树而不是匿名方法的方式。这意味着
x=>x.Metadata.AdvisorID==AdvisorID
不会在编译时编译成IL:而是编译成代码,构建一个等价的
表达式
对象,该对象可以传递给实体框架或LINQ to SQL等提供程序,以生成数据库查询

对大多数人来说,它意味着的另一部分是所谓的“语法糖”,它有效地代表您调用
.Where()
.OrderBy()
等:

from a in something
where a.Name == "Bob"
select a;
在这两种情况下,.NET中的
Queryable
类都提供了扩展方法,用于构建
表达式
对象链,例如
.Where()
.OrderBy()
.Select()
等-这些方法采用
IQueryable
(未类型化或带有泛型参数)并返回另一个。它们在表示整个查询的每个点上轻轻地包装一个
表达式
对象

意思是:

someQueryable.Where(x => x.Id > 3).OrderBy(x => x.Date).Select(x => x.Ref)
返回一个实现
IQueryable
的对象,该对象包含一个
表达式,该表达式如下所示:

Select(OrderBy(Where(someQueryable, x => x.Id > 3), x => x.Date), x => x.Ref)
。。。LINQ提供程序可以读取它以生成如下内容:

SELECT Ref FROM someTable WHERE Id > 3 ORDER BY Date
最后,请注意,
.Where()
.OrderBy()
等不限于可查询/LINQ对象。它们也适用于
IEnumerable
(和
IEnumerable
),但这不是LINQ,只是在调用该方法时执行操作。

LINQ(语言集成查询)是用于查询数据的语言。你不在乎它们来自哪里,这就是使用它的全部意义。您可以使用相同的代码来查询数组、集合、数据库、xml文件、目录等等。。。Linq在后台翻译您的代码,因此,如果您使用它从数据库获取数据,它将生成要发送到数据库的SQL

有两种可用的语法版本:

1.)lambda语法
2.)可链接方法


你选择哪一个并不重要,只要试着与它保持一致,并在你的情况下使用让你更舒服/更有意义的东西。

我认为两者都是LINQ,一个是语法上的糖,另一个是语法上的糖。(你链接的那个,没有双关语的意思,是语法上的甜点,它会产生一些类似你在这里发布的东西)实际上,考虑到“LINQ”已经成为C#世界中的一个流行词(有时,每一种扩展方法的使用都被称为“LINQ”),我认为这是一个很好的问题。@Borgleader我不明白这个意外的双关语。编辑:哦,哇,我太慢了。如果有权威(阅读:由Microsoft发布)来源明确指出“LINQ”不是类似SQL的语法(或者至少是Microsoft生产的使用lambda语法的LINQ示例),这个答案会更好。谢谢-更新为参考MSDN文章,其中显示了这两种变体的使用。
SELECT Ref FROM someTable WHERE Id > 3 ORDER BY Date