2012-11-28 94 views
1

目前我正在開發一個使用C#Linq的WPF應用程序,並且我有一個不可編輯的數據庫(如下圖所示)。有誰能教我如何將「統計」的數據存儲到四個數組中。如何將數據庫中的數據處理成數組?

  1. 第一個數組: 「HomeShot」
  2. 二陣: 「HomeScore」
  3. 第三組: 「AwayShot」
  4. 第四陣列: 「AwayScore」

enter image description here

+1

這裏的大部分工作將在字符串操作,不在linq中。但擁有四個陣列中的數據似乎是一個值得懷疑的目標。你希望通過將數據放在四個數組中實現什麼?可能有更好的方法。 – phoog

+0

@phoog:其實我有一個datagrid,我想在我的數據網格中顯示統計信息 – 0070

回答

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 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的。

我已經完成了我的頭頂幾乎,希望它有幫助。我相信其他人會有更乾淨的方式來做到這一點。

+0

我會upvote這個答案,但'foreach(結果中的var c)'示例是不正確的。 – phoog

1

正如我在我的評論中提到的,類似於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)); 
相關問題