C# 需要一种有效的方法来解决c语言中的一个简单问题吗#

C# 需要一种有效的方法来解决c语言中的一个简单问题吗#,c#,asp.net,C#,Asp.net,我正在使用c#开发一个web应用程序。我正在从数据库中读取一些数据到一个名为dt的数据表中。样本数据如下所示 agentName WeekNumber Score John 3 45 John 5 78 John 6 33 我想根据一些条件对上述数据进行一些更改。因为我想基于此数据绘制一个图表。代理名称始终相同。周字段是唯一的。我想使用下面列出的条件创建一个新的数据表 1-新数据表周字段必须从1开始。

我正在使用c#开发一个web应用程序。我正在从数据库中读取一些数据到一个名为dt的数据表中。样本数据如下所示

agentName  WeekNumber Score 
John       3          45
John       5          78
John       6          33
我想根据一些条件对上述数据进行一些更改。因为我想基于此数据绘制一个图表。代理名称始终相同。周字段是唯一的。我想使用下面列出的条件创建一个新的数据表

1-新数据表周字段必须从1开始。如果数据表中没有第1周的条目,您可以将数据添加到新数据表中,如下所示

John 1  0
这意味着只要给0作为分数

2-如果从数据库获得的数据表中第二行之后有任何缺失的周,则添加该周的行,分数为-1。 在上面的示例中,第一行之后缺少第4周。因此,将其添加到新的数据表中,分数为-1

新数据选项卡;样本数据见下文

agentName WeekNumber Score
John      1          0
John      2          0
John      3          45
John      4         -1
John      5         78
John      6         33
如何使用c#以有效的方法完成这项工作?行数将有所不同。
我想用c来做。由于某些原因而不使用查询

在数据库中有一个表,其中包含一年中每周的默认值。 选择结果时在此表上左键联接,如果缺少另一个结果,则采用默认值

e、 g

代码未经测试,但应获取默认表中的所有内容,以及dt表中存在的行。如果dt行不存在,将采用默认值


其中dt是带有值的现有表,def是带有每周默认值的表。

数据库中有一个带有一年中每周默认值的表。 选择结果时在此表上左键联接,如果缺少另一个结果,则采用默认值

e、 g

代码未经测试,但应获取默认表中的所有内容,以及dt表中存在的行。如果dt行不存在,将采用默认值


其中dt是带有值的现有表,def是带有每周默认值的表。

您可以使用以下类并从中构建新表

class AgentsData
{
    public static DataTabe ProcessDataTabe(DataTable dt)
    {
        Dictionary<string, AgentData> data = new Dictionary<string, AgentData>();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            string name = dt.rows[i][0].ToString();
            if (!data.ContainsKey(name))
                data.Add(name, new AgentData);
            int week = Convert.ToInt32(dt.rows[i][1]);
            int score = Convert.ToInt32(dt.rows[i][2]);

            data[name].Add(week, score);
        }

        foreach (vat agentData in data.Values)
            agentData.Process();

        //now build new data table from dictionary and return it
    }   
}

class AgentData
{
    public AgentData(string name)
    {
        Name = name;
        WeekScore = new Dictionary<int,int>();
    }

    public void Add(int weekNumber, int score)
    {
        WeekScore[weekNumber] = score;
    }

    public void Process()
    {
        int min = WeekScore.Keys.Min();
        int max = WeekScore.Keys.Max();

        for (int i = 0; i < min; i++)
            WeekScore.Add(i, 0);

        for (int i = min + 1; i < max; i++)
            if (!WeekScore.ContainsKey(i))
                WeekScore.Add(i, -1);
    }

    public string Name {get; private set;}  
    public Dictionary<int, int> WeekScore { get; private set;}
}
类代理数据
{
公共静态数据表ProcessDataTabe(数据表dt)
{
字典数据=新字典();
对于(int i=0;i
您可以使用下面的类并从中构建新表

class AgentsData
{
    public static DataTabe ProcessDataTabe(DataTable dt)
    {
        Dictionary<string, AgentData> data = new Dictionary<string, AgentData>();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            string name = dt.rows[i][0].ToString();
            if (!data.ContainsKey(name))
                data.Add(name, new AgentData);
            int week = Convert.ToInt32(dt.rows[i][1]);
            int score = Convert.ToInt32(dt.rows[i][2]);

            data[name].Add(week, score);
        }

        foreach (vat agentData in data.Values)
            agentData.Process();

        //now build new data table from dictionary and return it
    }   
}

class AgentData
{
    public AgentData(string name)
    {
        Name = name;
        WeekScore = new Dictionary<int,int>();
    }

    public void Add(int weekNumber, int score)
    {
        WeekScore[weekNumber] = score;
    }

    public void Process()
    {
        int min = WeekScore.Keys.Min();
        int max = WeekScore.Keys.Max();

        for (int i = 0; i < min; i++)
            WeekScore.Add(i, 0);

        for (int i = min + 1; i < max; i++)
            if (!WeekScore.ContainsKey(i))
                WeekScore.Add(i, -1);
    }

    public string Name {get; private set;}  
    public Dictionary<int, int> WeekScore { get; private set;}
}
类代理数据
{
公共静态数据表ProcessDataTabe(数据表dt)
{
字典数据=新字典();
对于(int i=0;i
那么,您称之为“高效”是什么呢:您希望将网络流量、磁盘使用率、内存使用效率降到最低,还是希望在一个有数千个并发用户的系统上获得最佳性能?您真的希望添加这些条目,还是只是在之后将它们相加?因为第二件事的解决方案没有这些“伪条目”是可能的(甚至可能更容易)。您是否尝试过一些东西,但发现它不够有效?我正在寻找一种内存效率高、执行速度更快的解决方案。有时数据表的大小会很大,大约为600rows@MatthiasG我真的想添加这些项,所以您称之为“高效”:您希望将网络流量、磁盘使用率、内存使用效率降至最低,或者,您希望在一个拥有数千个并发用户的系统上获得最佳性能?您真的希望添加这些条目,还是只是在之后求和?因为第二件事的解决方案没有这些“伪条目”是可能的(甚至可能更容易)。您是否尝试过一些东西,但发现它不够有效?我正在寻找一种内存效率高、执行速度更快的解决方案。有时数据表的大小会很大-arr