C# 我是否应该不使用LINQ对象,因为Microsoft可能会更改它?

C# 我是否应该不使用LINQ对象,因为Microsoft可能会更改它?,c#,linq,C#,Linq,我与一位同事就在C#代码中使用LINQ to对象(IEnumerable,而不是IQueryable)一事发生了争论。我使用的是LINQ,他说我们不应该在代码中使用外部供应商(Microsoft)的代码,而是应该将其封装在我们自己的抽象层中 现在,我了解了这种方法,它适用于拥有无名第三方dll的情况,该dll可能会在下周停业,或者在处理数据库调用时(即返回通用数据提供程序,而不是特定于SQL或Oracle的数据提供程序),但在我看来,LINQ语法太漂亮/优雅/易读,微软在未来10年内不会放弃。它

我与一位同事就在C#代码中使用LINQ to对象(IEnumerable,而不是IQueryable)一事发生了争论。我使用的是LINQ,他说我们不应该在代码中使用外部供应商(Microsoft)的代码,而是应该将其封装在我们自己的抽象层中

现在,我了解了这种方法,它适用于拥有无名第三方dll的情况,该dll可能会在下周停业,或者在处理数据库调用时(即返回通用数据提供程序,而不是特定于SQL或Oracle的数据提供程序),但在我看来,LINQ语法太漂亮/优雅/易读,微软在未来10年内不会放弃。它与ToString(“Hello{0}”,firstName)一样可能被删除;功能

我可以放弃争论,实现我们自己的LINQ库,在幕后调用标准的LINQ方法,但这不是过分了吗?另外,我只能使用扩展方法,我不知道如何包装:

from e in employees
select new { e.Name, e.Id };

你的论点是什么,赞成还是反对使用LINQ对象(IEnumerable扩展方法)?

他完全错了。
该论点仅适用于处理可替换组件(如数据库平台)时

微软非常小心地避免在.Net中进行破坏性的更改;他们不可能放弃林克

为了回答您的其他问题,查询理解语法(
from x in y
)是一种编译器功能,可以转换为方法调用。
如果您编写自己的方法,编译器将乐于使用它们


LINQ to Objects方法已经有了第三方实现,例如(用于.Net 2.0,它早于LINQ),或者(出于教育目的编写)

您的朋友错了。LINQ是C#3.0的旗舰功能,不会离开该语言。MS总是有可能停止支持C(尽管我非常怀疑),但只要有C,就会有LINQ

还考虑在哪个程序集中,LINQ-Objor扩展方法包含:<代码> Stask.Cype < /Cord>


我使用的是LINQ,他说我们不应该在代码中使用外部供应商(Microsoft)的代码,而是应该将其封装在我们自己的抽象层中


它是语言的核心部分(即C语言规范的一部分)。只要C#还在,它就会一直存在。对它的改变将打破改变,并将是一个巨大的成本,微软的客户。他们不会这么做。

包装ADO.NET或第三方库之类的层依赖关系:这个想法值得考虑


将LINQ包装到对象(框架和游戏规则改变者的核心部分):坏主意。

也许你的同事只是觉得这更正确:

var result = employees.Select(e => new { e.Name, e.Id });
不管怎样,我认为你的同事的担心是完全没有根据的


…有趣…

在同样的逻辑下,你的同事可能应该避免使用
列表
等。我投票决定结束,因为这不是一个建设性的讨论,而是一个具体的答案。破坏性的改变是极不可能发生的。你的同事似乎是一个过度抽象的人。“我们不应该使用外部供应商(Microsoft)”-这排除了所有的.NET库…@Chris:欢迎你编辑这个问题,让它更有建设性。就目前而言,这不是一个可以回答的问题;这里没有人有水晶球。同事是个白痴,上面提到的问题仍然不适合SO的问答形式。一切都可能会改变。它只适用于可能发生变化的情况,并且处理变化的成本大于处理试图保护您不受变化影响的附加抽象层的成本(包括设计、编写、测试和维护的成本)。好吧,微软在过去彻底改变了语言,例如从VB6到VB.NET。是的,他们试图使它尽可能兼容,但有许多突破性的变化。大多数人(包括我自己)会说这些改变是好事,是需要的。然而,10年内不太可能发生任何变化。VB.NET是一种新语言,不是VB6Nope的下一个版本,他反对使用var,因为它“懒惰”,他的论点是关于linq扩展方法的使用。@Daryl:一开始我觉得使用它有点奇怪……所以我可以理解使用某种乍一看似乎违反类型安全的东西的担忧。直到我明白了什么是
var
,我才想使用它,尽管它看起来像是每个人都在使用的。他必须克服它。这是一个非常好的观点@dlev。如果它是在一个叫做System.Core的dll中,我认为微软不会向开发者发出更强烈的信息,说它不会很快出现在任何地方。