1

目前我正在开发一个 WPF 应用程序C#Linq并且我得到了一个不可编辑的数据库(如下图所示)。有谁可以教我如何将“统计”的数据存储到四个数组中。

  1. 第一个数组:“HomeShot”
  2. 第二个数组:“HomeScore”
  3. 第三个数组:“AwayShot”
  4. 第四个数组:“AwayScore”

在此处输入图像描述

4

2 回答 2

1

正如我在评论中提到的,与 Derek 的回答类似,您可能需要一个表示数据网格中一行的单一类型。(通常,数据网格绑定到业务对象类型,因此值得一提的是,如果您在程序中的其他地方使用该类型,则可能有一个类型具有比该数据网格所需更多的属性。)对于这些示例,我将使用Derek 的Statistics类型,经过一些修改和名称更改,并假设您将数据网格绑定到实现的集合ICollection<Statistic>

public class Statistic
{
    public Statistic(int id, int homeshot, int homescore, int awayshot, int awayscore)
    {
        ID = id;
        HomeShot = homeshot;
        HomeScore = homescore;
        AwayShot = awayshot;
        AwayScore = awayscore;
    }

    public int ID { get; set; }
    public int HomeShot { get; set; }
    public int HomeScore { get; set; }
    public int AwayShot { get; set; }
    public int AwayScore { get; set; }
}

您没有提供有关如何从数据库中检索信息的任何信息,因此我假设您使用的是 DbDataReader。如果你使用 linq to SQL,这个例子看起来会有些不同:

while (dataReader.Read())
{
    int id = (int)dataReader["ID"];
    string statisticSource = (string)dataReader["Statistic"];
    int[] data = ExtractData(statisticSource);
    Statistic statistic = new Statistic(id, data[0], data[1], data[2], data[3]);
    statCollection.Add(statistic);
}

ExtractData 方法的实现有许多选项,具体取决于保证 Statistic 字符串格式的一致性。方法签名甚至有几个选项。我假设它返回一个包含四个值的 int 数组。其他实现可能会返回一个字符串索引的集合或其他东西。

此外,您可以在 Statistic 构造函数中调用字符串解析逻辑。为此,请使用此签名创建一个构造函数:

public Statistic(int id, string statisticSource)
{
    ID = id;
    int[] data = ExtractData(statisticSource);
    HomeShot = data[0];
    HomeScore = data[1];
    AwayShot = data[2];
    AwayScore = data[3];
}

在这种情况下,客户端代码如下所示:

while (dataReader.Read())
{
    int id = (int)dataReader["ID"];
    string statisticSource = (string)dataReader["Statistic"];
    Statistic statistic = new Statistic(id, statisticSource);
    statCollection.Add(statistic);
}

或者,事实上,如果您更喜欢更少的行和更复杂的表达式:

while (dataReader.Read())
    statCollection.Add(new Statistic((int)dataReader["ID"], (string)dataReader["Statistic"]));

糟糕,我刚刚注意到 linq to SQL 标记。我假设 Linq to SQL 将表作为DbStatistic实例序列提供给您。在这种情况下,您的客户端代码将如下所示:

foreach (var dbStatistic in dbStatistics)
{
    int[] data = ExtractData(dbStatistic.Statistic);
    Statistic statistic = new Statistic(dbStatistic.ID, data[0], data[1], data[2], data[3]);
    statCollection.Add(statistic);
}

或这个:

foreach (var dbStatistic in dbStatistics)
{
    Statistic statistic = new Statistic(dbStatistic.ID, dbStatistic.Statistic);
    statCollection.Add(statistic);
}

或这个:

foreach (var dbStatistic in dbStatistics)
    statCollection.Add(new Statistic(dbStatistic.ID, dbStatistic.Statistic));
于 2012-11-28T15:49:52.863 回答
0

我认为处理此类问题的更好方法是首先学习如何操作字符串,以便您可以将其分解为 4 部分。

我能想到的最简单的方法就是简单地获取数字:-

public List<int> statValues = new List<int>();

string input = "HOME SHOT 5 SCORE 2, AWAY SHOT 3 SCORE 0";
string result = Regex.Replace(input, @"[^\d]", "");

这将为您提供 5230。然后您可以将其拆分为整数:-

foreach (var c in result)
            {
                statValues.Add((int)c);
            }

一旦你解决了这个问题,我会看看构建一个代表你的数据的类,如下所示:-

公共类统计{

public Statistics(int homeshot, int homescore, int awayshot, int awayscore)
{

    HomeShot = homeshot;
    HomeScore = homescore;
    AwayShot = awayshot;
    AwayScore = awayscore;
}

public int HomeShot { get; set; }
public int HomeScore { get; set; }
public int AwayShot { get; set; }
public int AwayScore { get; set; }

}

然后,您需要查看创建统计列表对象:-

List<Statistics> listofStats = new List<Statistics>();

当您操作数据库中的每个条目时,将一个新项目添加到您的列表中,如下所示:-

listofStats.Add(new Statistics(statValues[0],statValues[1],statValues[2],statValues[3]));

从数据库中的所有条目构建此列表后,您可以将其用作 DataGridView 的数据源。

我已经做了很多事情了,希望它有所帮助。我相信其他人会有更清洁的方法来做到这一点。

于 2012-11-28T10:04:47.220 回答