gpt4 book ai didi

c# - 如何使用 LINQ 将这些数据组织成我想要的对象?

转载 作者:行者123 更新时间:2023-11-30 18:58:11 24 4
gpt4 key购买 nike

我有一个下面的类,我试图用我查询过的一堆数据创建一个列表:

public class Agency
{
public string AgencyName { get; set; }
public int AgencyID { get; set; }
public IEnumerable<AuditRule> rules { get; set; }
}

“AuditRule”在哪里:

public class AuditRule
{
public int AuditRuleID { get; set; }
public string AuditRuleName { get; set }
public int AvgDaysWorked { get; set; }
}

现在,经过相当复杂的查询后,我已经能够将我的数据放入一个匿名对象中,如下所示:

{ DateImported, AgencyID, AgencyName, AuditRuleName, AuditRuleID, DaysWorked }

我有数千条这种格式的记录,我正在尝试构建一个 IEnumerable <Agency > 它本身将包含每个机构的规则列表。

所以,以下面的数据为例:

{ AgencyID = 1, AgencyName = "CCR", AuditRuleName = "Call", AuditRuleID = 1, DaysWorked = 3 }  
{ AgencyID = 1, AgencyName = "CCR", AuditRuleName = "Call", AuditRuleID = 1, DaysWorked = 5 }
{ AgencyID = 1, AgencyName = "CCR", AuditRuleName = "Time", AuditRuleID = 2, DaysWorked = 2 }
{ AgencyID = 2, AgencyName = "YRX", AuditRuleName = "Call", AuditRuleID = 1, DaysWorked = 3 }
{ AgencyID = 2, AgencyName = "YRX", AuditRuleName = "Acct", AuditRuleID = 3, DaysWorked = 2 }

因此,根据这些数据,我试图首先构建一个代理机构列表(顶部的类别),在本例中显然是“CCR”和“YRX”。然后,对于每个机构,我希望在其 IEnumerable <AuditRule 中为其每个规则创建一个条目。 > 有记录。

因此,代理商“CCR”将有 2 个规则条目,“调用”和“时间”。 “Call”AuditRule 条目的 AvgDaysWorked 为 4,因为我们对 Agency“CCR”下的“Call”条目进行平均,即 3 天和 5 天的工作时间。 Time AuditRule 条目的 AvgDaysWorked 为 2,因为只有一个条目。

可以请具有 LINQ 忍者技能的人帮助我将这些数据整理成一个机构列表和每个机构的规则(以及该规则/机构组合的平均工作天数)吗?

这对我来说已经足够复杂了,我什至无法将那个匿名对象放在一起,而且我真的很难编写这个查询来创建这个 Agencies/AuditRules 列表。

在这种情况下我会使用 SelectMany() 或类似的东西吗?我有点迷路了。

最佳答案

我希望这能完成工作。

// GetAnonymousCollection() is hard to define... ;)
var anonymous = GetAnonymousCollection();

IEnumerable<Agency> result = anonymous
.GroupBy(a => a.AgencyID)
.Select(ag => new Agency()
{
AgencyID = ag.Key,
AgencyName = ag.First().AgencyName,
Rules = ag
.GroupBy(agr => agr.AudiRuleID)
.Select(agrg => new AuditRule()
{
AuditRuleID = agrg.Key,
AuditRuleName = agrg.First().AuditRuleName,
AvgDaysWorked = (Int32)agrg.Average(agrgr => agrgr.DaysWorked)
})
});

顺便说一下,考虑使用小数或 float 表示平均时间。

关于c# - 如何使用 LINQ 将这些数据组织成我想要的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075992/

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