2012-02-09 51 views
0

我不確定它是否是最好的公式化問題,但我想實現的是我有99%的數據庫對象。在這個例子中,我使用AnonymousList從SQL獲取幾列,然後將其轉換爲Entity對象。如何強制顯示int?值在Enity框架對象中的字符串?

我已經擴展了具有屬性Size的對象,以便能夠在數據庫中分配對象的大小。

public partial class SzkolenieMaterialyPrzedmiotowe { 
    public int? Size { get; 
     set; 
    } 
} 

下面的代碼來得到的東西去

using (var context = new EntityBazaCRM(Settings.sqlDataConnectionDetailsCRM)) 
     { 

      var anonimowaLista = context.SzkolenieMaterialyPrzedmiotowes.Where(d => d.SzkolenieID == szkolenieId).Select(d => new 
      { 
       d.MaterialyPrzedmiotoweID, 
       d.MaterialyPrzedmiotoweTyp, 
       Size = SqlFunctions.DataLength(d.MaterialyPrzedmiotowePlik), 
       d.MaterialyPrzedmiotoweOpis 
      }).AsEnumerable(); // anonymous list created to get only few columns 

      var listaSzkolenieMaterialyPrzedmiotowe = anonimowaLista 
      .Select(d => new SzkolenieMaterialyPrzedmiotowe 
      { 
       MaterialyPrzedmiotoweID = d.MaterialyPrzedmiotoweID, 
       MaterialyPrzedmiotoweTyp = d.MaterialyPrzedmiotoweTyp, 
       MaterialyPrzedmiotoweOpis = d.MaterialyPrzedmiotoweOpis, 
       Size= d.Wielkosc, 
      }).ToList(); // list based on anonymous list 

      objectListViewMaterialySzkoleniowe.SetObjects(listaSzkolenieMaterialyPrzedmiotowe); 
     } 

我怎麼能力的大小轉換爲KB(Helpers.ConvertBytesToKilobytes(Size ?? 0);)後,實際顯示本身,使其成爲後,這樣我就可以加入KB的字符串在ObjectListView中顯示它而不是int值?

我試圖做這樣的,但似乎失敗..

public partial class SzkolenieMaterialyPrzedmiotowe { 
    public int? Size{ get; 
     set; 
    } 
    public string SizeToString 
    { 
     get 
     { 
      return Helpers.ConvertBytesToKilobytes(Size ?? 0); 
     } 
     set { 
     } 
    } 
} 
+2

'公共覆蓋的ToString()'? – 2012-02-09 14:18:08

回答

1

您可以在大小屬性只是轉換爲字符串,並計算你的LINQ表達式裏面的「XKB」。但是大多數人不想丟失數字字節值。如果是這樣,只需創建另一個屬性或(靜態)方法,將字節大小轉換爲字符串後跟單位。

如Valdislav建議的那樣做一個ToString()重寫可以工作,但是如果僅爲一個大小轉換(imo)覆蓋整個對象的整個ToString()功能將會有點混亂。你可以考慮參數化ToString來增加更多的清晰度,如果沒有參數傳遞,只需調用base。

下面是一個簡單的例子的要求(和編輯基於評論):

class Program 
{ 
    static void Main(string[] args) 
    { 
     var myDemo = new Demo(); 
     myDemo.Size = 1000000; 
     myDemo.Value = 15.7m; 

     Console.WriteLine("ToSizeInKb: " + myDemo.ToString(DemoConversionType.ToSizeInKb)); 
     Console.WriteLine("ToValue: " + myDemo.ToString(DemoConversionType.ToValue)); 
     Console.WriteLine(Environment.NewLine + "Press enter to exit."); 
     Console.ReadKey(); 
    } 

    /// <summary> 
    /// Defines different ways to convert the Demo class objects into strings. 
    /// </summary> 
    enum DemoConversionType 
    { 
     ToSizeInKb, 
     ToValue 
    } 

    class Demo 
    { 
     public int? Size { get; set; } 
     public decimal Value { get; set; } 

     /// <summary> 
     /// Override the default ToString method and pass a "DemoConversionType" 
     /// that defaults how the object should be converted to a string. 
     /// </summary> 
     /// <returns></returns> 
     /// <param name='convType'></param> 
     public string ToString(DemoConversionType convType) 
     { 
      switch (convType) 
      { 
       // Return the Size in Kb 
       case DemoConversionType.ToSizeInKb: 
        return Size.GetValueOrDefault()/1000 + "Kb"; 
       // Return the Value to 2 decimal places. 
       case DemoConversionType.ToValue: 
        return string.Format("{0:N2}", Value); 
       // Bad conv type, default back to the base ToString() method. 
       default: 
        return base.ToString(); 
      } 
     } 
    } 
} 
+0

檢查我的編輯。我添加了我在發佈之前嘗試過的代碼,但它不起作用+我真的不知道如何在anonymouse類型和轉換類型中使用它。換句話說,你在說什麼以及如何使用它的例子會很好:-) – MadBoy 2012-02-09 15:40:58

+0

@MadBoy添加了一些演示代碼,演示了所提到的解決方案之一。 – Timeout 2012-02-10 01:20:23

+0

它如何知道ToString()與Size有關?如果我有Size,ID和其他一些字段以及一個ToString()會怎麼樣?如果我想要有多個選擇,比如ToString的大小是一回事,那麼如果ToString的ID是somethign else等,我該如何實現呢? – MadBoy 2012-02-16 20:13:20

相關問題