我在使用什么?(Linq/sql)

3

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

 var le = domainModel.EntityDataContext.Table_name_here.Query()
                    .WithFullReadCheck(domainModel.Security)
                    .Where(x => x.Metadata.AdvisorID == advisorId).FirstOrDefault();

据说上面的代码是linq,由于我不知道linq,所以决定学习它。然而,在 https://msdn.microsoft.com/en-us/library/gg509017.aspx 上,情况有很大不同。
我的代码中使用了什么?它是linq的一个版本吗?还是其他东西?

4
我认为两者都是LINQ,其中一个是另一个的语法糖。(你提供的那个链接就是一个语法糖,它生成类似于你在这里发布的内容) - Borgleader
实际上,考虑到“LINQ”在C#世界中已经成为了一个流行词汇(有时候,每个扩展方法的使用都被称为“LINQ”),我认为这是一个非常好的问题。 - O. R. Mapper
@Borgleader 我不明白无意中的双关语。编辑:哦,哇,我真慢。 - SimpleVar
4个回答

5

2
这个答案如果有一个权威的(即由微软发布的)来源,明确说明“LINQ”不是SQL-like语法(或者至少有一个使用lambda语法的微软生产的LINQ示例),那就更好了。 - O. R. Mapper
1
谢谢 - 已更新以引用MSDN文章,该文章展示了两种变体的使用。 - Russ Penska

1
那是查询的扩展方法语法。 .Query().WithFullReadCheck() 很少使用,但是其他的 .Where.FirstOrDefault 都是相当常见的查询扩展。LINQ 是一种特殊的语法,用于表达可以通过链接查询扩展方法完成的相同操作。在幕后,它们是相同的。请参见此问题,其中提供了 LINQ 和扩展方法语法的示例,并对它们之间的差异进行了很好的讨论:扩展方法语法与查询语法

1
Linq(语言集成查询)是您用于查询数据的语言。您不需要关心它们来自哪里,这就是使用它的全部意义所在。您可以使用相同的代码来查询数组、集合、数据库、XML文件、目录等。Linq在后台翻译您的代码,因此,如果您例如使用它从数据库获取数据,则会产生要发送到数据库的SQL语句。
有两个语法版本可用:
1.) lambda语法 2.) 可链接方法
无论您选择哪个版本,只需尝试保持一致,并使用在您的情况下更舒适/更有意义的内容。

1
LINQ是“语言集成查询”的缩写。在实际应用中,对大多数人来说它有两个意义:
首先,编译器将内联委托转换为表达式树,而不是匿名方法。这意味着x => x.Metadata.AdvisorID == advisorId在编译时不会被编译成IL代码:相反,它会被编译成构建等效Expression对象的代码,这可以传递给提供程序,例如Entity Framework或LINQ to SQL,以生成数据库查询。
其次,它对大多数人来说意味着所谓的“语法糖”,它有效地代替你调用.Where().OrderBy()等方法。
from a in something
where a.Name == "Bob"
select a;

在这两种情况下,.NET中的Queryable类提供了扩展方法来构建一系列Expression对象,例如.Where().OrderBy().Select()等等。它们接受一个IQueryable(可以是无类型的或带有泛型参数的),并返回另一个IQueryable。它们在每个点轻松包装一个代表整个查询的Expression对象。
someQueryable.Where(x => x.Id > 3).OrderBy(x => x.Date).Select(x => x.Ref)

返回一个实现了IQueryable接口的对象,它包含一个类似于以下表达式的Expression:
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,只会在调用方法时立即执行操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接