类似于 .NET 中的"Sparse Fieldsets"



我试图找到词汇来描述我想要的东西以及它是否存在。

我有一个表格,显示了来自大型对象的几个数据点。仅为表加载整个对象非常慢。有没有办法只将我想要的几个属性传递给前面,而不必定义一个新对象?

我在JSON API中找到了一个名为稀疏字段集的东西,我想知道以另一个名称存在的.NET是否存在这样的东西。

更新:与另一位编码人员交谈时,我意识到在后端和数据库之间实现这样的东西并为此表进行特定调用可能更有意义。我仍然需要确定是否需要创建一个新对象来支持这一点。我认为如果我只保留相同的对象但清空表不需要的所有连接对象,它仍然会更快。但也许这被认为是不好的做法?此外,我们还使用实体框架来发挥其价值。

更新2:我刚刚创建了一个没有所有.Include()的新查询,并且足以满足我的需要:

_dataContext.ApplePie
.Include(f => f.Apples).ThenInclude(f => f.Apple)
.Include(f => f.Sugars).ThenInclude(f => f.MolecularStructure)
.Include(f => f.Recipe)

也许您正在寻找匿名类型?

例如,如果您有一个具有三个属性的类型化对象,但您只想对两个属性进行操作:

var threePropThing = new ThreePropertyThing { Id = 1, Message = "test", ExtraProperty = "ex" };
var myAnonThing = new { Id = threePropThing.Id, Message = threePropThing.Message };  

最佳做法是不要传递此匿名对象。但是,如果您确实需要,可以将其返回为类型object

通常,在 c# 中传递数据时,您希望对其进行类型化。

C#是一种强类型语言,我想说的是,当对象定义(属性)事先不知道时,C# 支持场景是不寻常的,就像在 JSON API"字段"参数案例中一样。实现这一点意味着使用反射来过滤属性,这通常很慢且容易出错。

在实现 C# Web 服务时,人们通常会为每个请求创建一个 DTO 响应模型。

如果您的表具有固定的字段集,我个人建议创建一个仅包含表所需字段的DTO类,然后创建一个方法,该方法为您的特定请求返回此响应。虽然它与问题中的"无需定义新对象"不一致,但它明确了意图,并使将来维护 API 变得更加容易。

如果您有许多这样的方法,您可能希望使用像 AutoMapper 这样的库来节省时间并避免将值从数据模型复制到 DTO 的重复代码。

最新更新