何时/为什么要在应用程序中使用Linq?

时间:2011-03-21 17:50:06

标签: c# asp.net

我知道linq如何工作,但我不知道我应该在哪里使用linq?

11 个答案:

答案 0 :(得分:12)

问题就像问“我知道加减工作是怎么做的,但我什么时候使用加法?什么时候使用减法?

当你想知道两件事的总和时,你想使用加法,当你想知道它们之间的差别时。

基本上所有LINQ都会将操作符添加到C#和VB语言中,以进行排序,过滤,投影,连接和分组。你什么时候使用LINQ?当您想要排序,过滤,投影,加入或分组时。

答案 1 :(得分:6)

我说使用LINQ .. 绝对任何地方它将有助于以简洁和可维护的方式实现您的目标。

没有广泛使用或不使用限制,你真的必须判断手头的代码片段是否会受益于LINQ,一般来说一些旧的过于冗长的代码片段(嵌套循环等)可以在LINQ中更清晰地表达,并且可能是有益的。

应该注意LINQ NOT 是LINQ to SQL的同义词,LINQ代表语言集成查询,在数据库环境之外非常有用。

答案 2 :(得分:2)

当您必须使用IEnumerable(或在针对数据库的操作的情况下使用IQueryable)时,通常使用LINQ。 它使您的代码更清晰,更实用。

您可以使用它来替换for循环:

from i in Enumerable.Range(0, n)
where i % 2 == 0
select i;

而不是:

for (int i = 0; i < n; i++)
{
    if (i % 2 == 0)
    {
        something.Add(i);
    }
}

答案 3 :(得分:1)

你应该在适当的地方使用LINQ,因为它可以比传统的常见程序编程习语更具表现力和简洁性。

答案 4 :(得分:1)

您可以在多种情况下使用它,例如:

  • 从Entity Framework检索数据或使用Linq to SQL
  • 对集合执行操作(排序,选择等)
  • 遍历XML文档

这些操作都需要使用Linq的代码少得多。

答案 5 :(得分:1)

LINQ是一个标准。除非您的团队预先建立并同意自定义图层,否则您制作的自定义图层不会。如果您的团队不会制作自定义图层,那么使用LINQ可能会缓解每个人都有自己的方式向数据库发出请求的问题。

答案 6 :(得分:0)

您可以随时在应用程序中过滤数据,而无需运行查询。这是一个查看如何使用它的示例的好地方。

http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

答案 7 :(得分:0)

对我而言,它使我的代码更简洁,更易于维护。在任何地方使用它都可以访问或操作数据集,XML,列表等数据集合。

但请记住一些怪癖。

答案 8 :(得分:0)

在代码更强可读可维护的地方。

在您处理数据集合并且想要转换,过滤,连接或排序的地方。

不必使用LINQ,它不能解决所有问题。在某些情况下,它实际上可能比程序编程方式更差。

开始使用它,凭借时间和经验,您会感觉到它有意义且最有用。

答案 9 :(得分:0)

谢谢你的回答。 答案可能需要页面为什么linq?但在阅读了ceratin书之后, 如果我说LINQ和LINQ to SQL的主要目标是 摆脱,或至少减少关系数据库结构和面向对象之间的阻抗不匹配。调整C#语言比更改SQL或XML更容易。 使用LINQ,目标是深入集成数据查询和功能 将语言转换为编程语言。 LINQ消除了对象,数据库和XML之间的许多障碍。它 使我们能够使用相同的语言集成来处理这些范例中的每一个 设施。

我从书中得到答案* Linq In Action。 * 在第一章中清除了为什么linq。 这是一本非常好的书。

答案 10 :(得分:0)

让我们举个例子。您希望编写一个简单的查询来检索客户,如下所示:

SELECT UPPER(Name)
FROM Customer
WHERE Name LIKE 'A%'
ORDER BY Name

这看起来不太糟糕,对吧?但现在假设这些结果正在提供一个网页,我们想要只检索21-30行。突然间,你需要一个子查询:

SELECT UPPER(Name) FROM
(
   SELECT *, RN = row_number()
   OVER (ORDER BY Name)
   FROM Customer
   WHERE Name LIKE 'A%'
) A
WHERE RN BETWEEN 21 AND 30
ORDER BY Name

这里是LINQ中的相同查询。简单性的提升很明显:

var query =
   from c in db.Customers
   where c.Name.StartsWith ("A")
   orderby c.Name
   select c.Name.ToUpper();

var thirdPage = query.Skip(20).Take(10);

只有当我们枚举thirdPage时,查询才会实际执行。对于LINQ to SQL或Entity Framework,转换引擎会将查询(我们分两步编写)转换为针对其连接的数据库服务器优化的单个SQL语句。