扩展方法语法与查询语法

14 浏览
0 Comments

扩展方法语法与查询语法

除了编写简洁的代码外,使用扩展方法相对于LINQ语法还有其他优势吗?

0
0 Comments

扩展方法语法与查询语法的问题是由于查询表达式中的自定义扩展方法不在关键字列表中,与其他关键字混在一起会显得有些奇怪。解决方法是使用方法基础查询,这样自定义扩展方法会更好地阅读。

例如,我正在使用一个名为"Into"的自定义扩展方法,它只接受一个字符串作为参数。

使用查询的示例:

var query = (from p in Products
    where p.Name.Contains("foo")
    orderby c.Name
    select p).Into("MyTable");

使用扩展方法的示例:

var query = Products
    .Where(p => p.Name.Contains("foo"))
    .OrderBy(p => p.Name)
    .Into("MyTable");

在我看来,使用方法基础查询在拥有自定义扩展方法时读起来更好。只是一个小修正;在你的示例中,忘记在后一个LINQ扩展方法中添加闭合括号,靠近`p.Name.Contains("foo")`。

0
0 Comments

扩展方法语法与查询语法之间的问题是如何使用Func和Action的情况。在使用这三个Func时,有时会出现情况。

问题的原因是,查询语法和扩展方法语法在使用Func时有所不同。查询语法只能查找返回Boolean而不是返回Boolean的Func,因此在使用Func时有一些限制。这就是为什么有时候使用查询语法可能更好的原因。

解决方法是创建一个方法来创建一个基于原始方法调用的Func。通过创建一个返回"user => IDIsBelowNumber(user, number, true)"的Func,我们可以绕过无法直接调用方法的限制。然后将其插入到扩展方法中使用。

在这个例子中,我们使用了一个简单的示例来说明问题。首先,我们定义了三个Func,分别用于获取用户名、检查ID是否小于10和检查ID是否大于10。然后我们使用这三个Func来执行查询。

在查询语法中,我们可以直接使用Func,并且查询语法会将其转换为相应的Lambda表达式。但是在扩展方法语法中,我们无法直接使用Func,所以我们需要创建一个返回Func的方法,并将其插入到扩展方法中。

这个例子表明,有时候使用查询语法可能更方便一些。使用查询语法,我们可以直接使用Func,而不需要额外的步骤来创建一个Func。但是在某些情况下,扩展方法语法可能更适合,因为它可以充分利用Func的功能。

总之,扩展方法语法和查询语法之间的问题是在使用Func时的差异。查询语法可以直接使用Func,而扩展方法语法需要额外的步骤来创建一个Func。在某些情况下,使用查询语法可能更方便,而在其他情况下,扩展方法语法可能更适合。

0
0 Comments

Extension methods syntax vs query syntax这个问题的出现原因是有人提出了两种不同的语法风格来处理LINQ查询,即扩展方法语法和查询语法。一些人喜欢使用扩展方法语法,因为它更符合他们代码的风格,并且使用扩展方法可以更轻松地构建表达式。另一些人则喜欢使用查询语法,因为它更接近自然语言的表达方式。

解决这个问题的方法是选择其中一种语法风格,并坚持使用它。尽管两种语法风格都可以实现相同的功能,但选择一种风格并保持一致有助于代码的可读性和维护性。

以下是关于这个的问题的原文内容:

我认为不要同时使用两种语法风格,选择一种并坚持使用是个好主意。大部分情况下这是个人口味的问题,但是在查询语法(理解方法)中,并不是所有的操作符都可用,正如之前所说的那样。

我发现扩展方法语法更符合我的代码风格。我将我的SQL写在SQL中。使用扩展方法只需在其上添加所有内容,非常容易构建表达式。

这只是我的个人意见。

由于我还不能发表评论,我想在这里对Programming Tool的回答做一个评论:

为什么要为最后一个示例创建一个全新的方法?你不能只使用以下代码吗:

.Where(user => IDIsBelowNumber(user, 10, true))

我相信你可以这样做,但是我认为他试图创建一个不需要传递用户参数的简洁方法。至少,我认为是这样的...这只是一个示例而已。

是的,但是相比于where IDIsBelowNumber(user, 10, true).Where(user => IDIsBelowNumber(user, 10, true))有什么不好的呢?

0