目前我正在開發一個使用C#
和Linq
的WPF應用程序,並且我有一個不可編輯的數據庫(如下圖所示)。有誰能教我如何將「統計」的數據存儲到四個數組中。如何將數據庫中的數據處理成數組?
- 第一個數組: 「HomeShot」
- 二陣: 「HomeScore」
- 第三組: 「AwayShot」
- 第四陣列: 「AwayScore」
目前我正在開發一個使用C#
和Linq
的WPF應用程序,並且我有一個不可編輯的數據庫(如下圖所示)。有誰能教我如何將「統計」的數據存儲到四個數組中。如何將數據庫中的數據處理成數組?
我認爲一個更好的方法來處理這樣的事情,首先要學習如何操作字符串,以便將其分解進入你的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 class Statistics {
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的。
我已經完成了我的頭頂幾乎,希望它有幫助。我相信其他人會有更乾淨的方式來做到這一點。
我會upvote這個答案,但'foreach(結果中的var c)'示例是不正確的。 – phoog
正如我在我的評論中提到的,類似於Derek的回答,您可能需要一個代表數據網格中某一行的單一類型。 (通常情況下,datagrid綁定到業務對象類型,所以值得一提的是,如果在程序的其他地方使用類型,那麼您可能會使用具有比此datagrid所需更多屬性的類型。)對於這些示例,我將使用德里克的Statistics
類型,有一些修改和更名,並假定你將DataGrid綁定到實現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由方法的實現多種選擇,這取決於如何相一致的統計字符串的格式保證是。方法簽名甚至有幾個選項。我做了一個假設,它返回一個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));
這裏的大部分工作將在字符串操作,不在linq中。但擁有四個陣列中的數據似乎是一個值得懷疑的目標。你希望通過將數據放在四個數組中實現什麼?可能有更好的方法。 – phoog
@phoog:其實我有一個datagrid,我想在我的數據網格中顯示統計信息 – 0070