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

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

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

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

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

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

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

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

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

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