目前我正在开发一个 WPF 应用程序C#
,Linq
并且我得到了一个不可编辑的数据库(如下图所示)。有谁可以教我如何将“统计”的数据存储到四个数组中。
- 第一个数组:“HomeShot”
- 第二个数组:“HomeScore”
- 第三个数组:“AwayShot”
- 第四个数组:“AwayScore”
目前我正在开发一个 WPF 应用程序C#
,Linq
并且我得到了一个不可编辑的数据库(如下图所示)。有谁可以教我如何将“统计”的数据存储到四个数组中。
正如我在评论中提到的,与 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));
我认为处理此类问题的更好方法是首先学习如何操作字符串,以便您可以将其分解为 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 的数据源。
我已经做了很多事情了,希望它有所帮助。我相信其他人会有更清洁的方法来做到这一点。