LINQ - 使用选择 - 理解选择

P.B*_*key 4 c# linq .net-4.0

我觉得LINQ有点困难.我喜欢这个概念,并相信它有很大的潜力.但是,在编写了这么多SQL之后,语法对我来说并不容易.

A. 有多种方式可以选择什么?

我看到我能够创建一个上下文并使用方法执行Select().

context.Table.Select(lamba expression);
Run Code Online (Sandbox Code Playgroud)

好的......我为什么要用这个?它与这种类型的选择相比如何?

var returnVal = from o in context.Table
                orderby o.Column
                select o;
Run Code Online (Sandbox Code Playgroud)

B.请解释一下变量的性质

**from X** in context.Table
Run Code Online (Sandbox Code Playgroud)

为什么我们在这里贴上一个看似任意命名的变量?这不应该是一种已知的类型<Table>吗?

usr*_*usr 5

答:这是一样的.编译器将查询表达式转换为方法调用.完全相同的.

B:x与foreach中的相同(context.Table中的var X).您可以为表/序列的单个元素定义名称.


Tim*_*Tim 5

所以...

var returnVal = context.Table.Select(o => o);
Run Code Online (Sandbox Code Playgroud)

var returnVal = from o in context.Table
                select o;
Run Code Online (Sandbox Code Playgroud)

是相同的。在第二种情况下,C# 只是提供了很好的语法糖来为您提供更接近普通 SQL 语法的内容。请注意,我从您的第二个查询中删除了 orderby。如果你想在那里,那么第一个将变成:

var returnVal = context.Table.OrderBy(o => o.Column).Select(o => o);
Run Code Online (Sandbox Code Playgroud)

至于你的最后一个问题......我们不会在这里粘贴任意命名的变量。我们为每一行指定一个名称,以便稍后在语句中引用它。它是隐式类型的,因为系统知道 Table 包含什么类型。

为了回应您的评论,我想补充一点想法。您提到正常的方法调用会变得很糟糕。确实可以。下面是一个简单的示例,其中 LINQ 语法立即变得更加简洁(至少,如果您习惯了 SQL 语法):

var returnVal = context.Table.OrderBy(o => o.Column1)
                             .ThenBy(o => o.Column2)
                             .ThenBy(o => o.Column3)
                             .Select(o => o);
Run Code Online (Sandbox Code Playgroud)

相对

var returnVal = from o in context.Table
                orderby o.Column1, o.Column2, o.Column3
                select o;
Run Code Online (Sandbox Code Playgroud)