我觉得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.请解释一下变量的性质
Run Code Online (Sandbox Code Playgroud)**from X** in context.Table
为什么我们在这里贴上一个看似任意命名的变量?这不应该是一种已知的类型<Table>吗?
答:这是一样的.编译器将查询表达式转换为方法调用.完全相同的.
B:x与foreach中的相同(context.Table中的var X).您可以为表/序列的单个元素定义名称.
所以...
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)