LINQ - 流利和查询防爆pression - 是否有一个比其他任何好处(S)? [英] LINQ - Fluent and Query Expression - Is there any benefit(s) of one over other?

查看:137
本文介绍了LINQ - 流利和查询防爆pression - 是否有一个比其他任何好处(S)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

LINQ是最大的改进,因为仿制药到.NET之一,它为我节省了大量时间和code线。然而,流利的语法似乎更自然来我比查询前pression语法。

LINQ is one of the greatest improvements to .NET since generics and it saves me tons of time, and lines of code. However, the fluent syntax seems to come much more natural to me than the query expression syntax.

var title = entries.Where(e => e.Approved)
    .OrderBy(e => e.Rating).Select(e => e.Title)
    .FirstOrDefault();

var query = (from e in entries
             where e.Approved
             orderby e.Rating
             select e.Title).FirstOrDefault();

有两个或两个之间的区别是有一个比其他任何特定的利益?

Is there any difference between the two or is there any particular benefit of one over other?

推荐答案

既不是更好的:他们所服务的不同需求。当你想利用多个变量范围查询语法进入自己的。这发生在三种情况:

Neither is better: they serve different needs. Query syntax comes into its own when you want to leverage multiple range variables. This happens in three situations:


  • 当使用let关键字

  • 当你有多个发电机(从的 的条款)

  • 在做加盟

下面是一个例子(从LINQPad样本):

Here's an example (from the LINQPad samples):

string[] fullNames = { "Anne Williams", "John Fred Smith", "Sue Green" };

var query =
  from fullName in fullNames
  from name in fullName.Split()
  orderby fullName, name
  select name + " came from " + fullName;

现在比较这对同样的事情在方法的语法:

Now compare this to the same thing in method syntax:

var query = fullNames
  .SelectMany (fName => fName.Split().Select (name => new { name, fName } ))
  .OrderBy (x => x.fName)
  .ThenBy  (x => x.name)
  .Select  (x => x.name + " came from " + x.fName);

方法的语法,另一方面,公开查询操作的全域,并且与简单的查询更简洁。您可以通过混合查询和方法的语法得到两全其美。这通常是在做LINQ到SQL查询:

Method syntax, on the other hand, exposes the full gamut of query operators and is more concise with simple queries. You can get the best of both worlds by mixing query and method syntax. This is often done in LINQ to SQL queries:

var query =
  from c in db.Customers
  let totalSpend = c.Purchases.Sum (p => p.Price)    // Method syntax here
  where totalSpend > 1000
  from p in c.Purchases
  select new { p.Description, totalSpend, c.Address.State };

这篇关于LINQ - 流利和查询防爆pression - 是否有一个比其他任何好处(S)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆