为什么使用匿名类型而不是创建类

时间:2014-01-29 21:34:09

标签: c# linq anonymous-types

我正在重构旧的应用程序,它使用动态内联SQL,从大型Oracle数据库中提取数据。我创建了一个工作正常的存储过程(PL / SQL)。因为它只有一行(datarow),所以我让它返回一个数据行。该类位于DAL中。

当我重构事物时,我认为我会将数据库(在DAL中)与业务层隔离(使用linQ)。我的第一个想法是创建一个包含返回的数据行的对象。

我的一位同事推荐匿名类型,我不熟悉。在我迄今为止所做的阅读中,它看起来很简单。如果我仍然需要使用匿名类型放置字段名和字段类型,我只是没有看到它的值。

我错过了什么吗?如果我返回数据集/数据表,那么使用匿名类型会有更多的价值吗?

3 个答案:

答案 0 :(得分:5)

匿名类型旨在从创建它们的范围中使用。没有其他范围应该知道匿名类型的定义,因此,由于您希望从方法返回此对象,因此匿名类型是不合适的。

一般来说,我们的想法是,对象仅在一两个地方使用,所有这些都在同一个方法中,并且它的使用非常简单直接,因此无需创建新的命名类型。它们也是不可变的,在C#中创建不可变对象是......更详细。

答案 1 :(得分:0)

匿名类型非常适合一次性操作,但我不会将它们用作数据库实体的替代品。使用它们真的是一个糟糕的设计。

答案 2 :(得分:0)

由于您无法返回匿名类型,因此您当然不应该使用它来表示域对象。它们的优点在于一次性使用的形式,通常在处理数据对象集合时在lambda表达式中。

一个典型的例子是当您需要处理两个单独的集合时:您可以zip them一起,并将结果投影到仅存在于LINQ查询范围内的匿名类型。