2012-02-09 5 views
0

私はそれが最良の定式化された質問であるかどうかはわかりませんが、達成したいのはデータベースのオブジェクトの99%を持っていることです。この例では、AnonymousListを使用してSQLからいくつかの列を取得し、Entityオブジェクトに変換します。intを強制的に表示するには? Enity Frameworkオブジェクトの文字列としての値?

データベースのオブジェクトのサイズを割り当てることができるようにプロパティのサイズでオブジェクトを展開しました。ここで

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を持つ文字列が、それは私がすることができます後に追加となりint値の代わりにObjectListViewでそれを表示しますか?

あなただけの文字列にサイズプロパティを変換し、あなたのLINQの式の中「XKB」を計算することができる。..

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

'公共オーバーライドのToString()'? –

答えて

1

を私はそのようにそれをやってみましたが、それは失敗しているようです。しかし、ほとんどの人は数字のバイト値を失いたくはありません。その場合は、バイトサイズを文字列に変換して単位を変換する別のプロパティまたは(静的)メソッドを作成してください。

Valdislavが提案したようにToString()オーバーライドを行うと、サイズ変換(imo)のためだけにオブジェクト全体のToString()機能全体をオーバーライドするのはちょっと混乱します。 ToStringをパラメータ化してより明確にし、パラメータが渡されない場合はベースを呼び出すことを検討できます。要求された(とコメントをもとに編集された)としてここ

は簡単な例です:

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

私の編集をチェックしてください。投稿する前に試したコードを追加しましたが、うまくいきません+匿名タイプとコンバージョンタイプで使用する方法はわかりません。言い換えれば、あなたが言っていることの例とそれを使う方法はいいでしょう:-) – MadBoy

+0

@MadBoy上記のソリューションの1つを示すデモコードをいくつか追加しました。 – Timeout

+0

ToString()はSizeに関連していることをどのように知っていますか?Size、ID、およびその他のフィールドとToString()を1つだけ使用するとどうなりますか?サイズのToStringのような複数の選択肢を持ちたいと思ったら、IDのToStringは他のものと同じです。どうしたらいいですか? – MadBoy

関連する問題