Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何强制显示int?值作为字符串存在于Enity Framework对象中?_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 如何强制显示int?值作为字符串存在于Enity Framework对象中?

C# 如何强制显示int?值作为字符串存在于Enity Framework对象中?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我不确定这是否是最好的公式化问题,但我想实现的是,我有99%的对象来自数据库。在本例中,我使用AnonymousList从SQL中获取一些列,然后将其转换为实体对象 我已经用属性大小扩展了对象,以便能够指定数据库中对象的大小 public partial class SzkolenieMaterialyPrzedmiotowe { public int? Size { get; set; } } 这是让事情进展顺利的代码 using (var context

我不确定这是否是最好的公式化问题,但我想实现的是,我有99%的对象来自数据库。在本例中,我使用AnonymousList从SQL中获取一些列,然后将其转换为实体对象

我已经用属性大小扩展了对象,以便能够指定数据库中对象的大小

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 {
        } 
    }
}

您可以将size属性转换为字符串,然后计算linq表达式中的“XKb”。然而,大多数人不希望丢失数字字节值。如果是这样,只需创建另一个属性或(静态)方法,将字节大小转换为后跟单位的字符串

按照Valdislav的建议执行ToString()重写可能会起作用,但仅为大小转换(imo)而重写整个对象的整个ToString()功能会有点混乱。您可以考虑参数化ToSt字符串来增加清晰度,如果没有传递任何参数,只需调用基类。 以下是一个简单的示例,根据要求(并根据评论进行编辑):

类程序
{
静态void Main(字符串[]参数)
{
var myDemo=newdemo();
myDemo.Size=1000000;
myDemo.Value=15.7m;
WriteLine(“ToSizeInKb:+myDemo.ToString(DemoConversionType.ToSizeInKb));
WriteLine(“ToValue:+myDemo.ToString(DemoConversionType.ToValue));
Console.WriteLine(Environment.NewLine+“按回车键退出”);
Console.ReadKey();
}
/// 
///定义将演示类对象转换为字符串的不同方式。
/// 
枚举DemoConversionType
{
ToSizeInKb,
托瓦尔
}
课堂演示
{
公共整数?大小{get;set;}
公共十进制值{get;set;}
/// 
///重写默认的ToString方法并传递“DemoConversionType”
///这是将对象转换为字符串的默认方式。
/// 
/// 
/// 
公共字符串到字符串(DemoConversionType convType)
{
开关(转换型)
{
//返回大小(Kb)
案例DemoConversionType.ToSizeInKb:
返回大小.getValuerDefault()/1000+“Kb”;
//将值返回到小数点后2位。
案例DemoConversionType.ToValue:
返回string.Format(“{0:N2}”,Value);
//错误的conv类型,默认返回到基ToString()方法。
违约:
返回base.ToString();
}
}
}
}

公共覆盖ToString()
?检查我的编辑。我已经添加了我在发布之前尝试过的代码,但它不起作用+我真的不知道如何在匿名类型和转换类型中使用它。换句话说,举一个例子来说明你在说什么以及如何使用它会很好:-)@MadBoy添加了一些演示代码来演示所提到的解决方案之一。它如何知道ToString()与大小有关。。如果我有Size、ID和其他一些字段,只有一个ToString(),会怎么样?如果我想有多个选择,比如ToString for size是一件事ToString for ID是另一件事等等,我该如何实现呢?@MadBoy在我的示例中,我创建了一个名为ConversionType的枚举,并将其传递给ToString方法。因此调用方必须传递:ConversionType.SizeInKb,这就是它如何知道的。如果您想要一个ToString方法,您可以添加任意数量的转换类型,然后修改我的switch语句以基于该类型返回所需的字符串值。我的意思是如何继续使用next to public int?Size{get;set;}公共十进制值{get;set;}我将如何使用ToString()作为值(考虑到我也使用Size/ToString作为Size?您能修改您的示例来向我展示这一点吗?
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();
            }
        }
    }
}