gpt4 book ai didi

asp.net-mvc - LINQ 投影是否应该是强类型的

转载 作者:行者123 更新时间:2023-12-04 05:38:16 26 4
gpt4 key购买 nike

我在 MVC 项目中有一个聚合数据 View ,它显示按审计状态分割的每月总数。 Controller 代码使用简单的 LINQ 投影到匿名对象中进行设置,如下所示:

From audits In db.Audits
Group By key = audits.DateCreated.Value.Month Into g = Group
Select New With {
.Month = key,
.Assigned = g.Sum(AuditsWithStatus(AuditStatus.Issued)),
.Unassigned = g.Sum(AuditsWithStatus(AuditStatus.Pending)),
.Closed = g.Sum(AuditsWithStatus(AuditStatus.Closed)),
.Cancelled = g.Sum(AuditsWithStatus(AuditStatus.Cancelled))
}

我知道这是 LINQ(使用匿名类型)的一大优势,但我不喜欢在 View 中丢失强类型(即 @ModelType SomeStrongType)。对此有什么一般性建议吗?处理该问题的文章、博客或其他地方以及何时使用哪个?

最佳答案

您不能对方法范围之外的匿名类型执行任何操作。例如,您无法将它们返回到您的 View 。在这些情况下,您必须使用已知类型。

当我选择然后以另一种方式处理的数据时,我使用匿名类型。例如,使用 Linq 从 1 个源中选择一些定制数据,然后放入另一个源。

如果您要返回聚合数据,例如 IEnumerable<IGrouping<TKey, TValue>>TKeyTValue是匿名类型(如果需要,您可以按匿名类型分组);那么你不会想为 TKey 创建 2 个类和 TValue ,其中 TKey有一个被覆盖的 EqualsGetHashCode所以你可以按它分组。然后什么都不做,只是从中读取一些值并将其扔掉,永远不要重复使用。

TLDR; 当不需要创建已知类型来存储结果时使用它们。如果您需要将结果传递到方法范围之外的某个地方,那么您将需要一个类型。

关于asp.net-mvc - LINQ 投影是否应该是强类型的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11630693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com