C# 如何强制显示int?值作为字符串存在于Enity Framework对象中?
我不确定这是否是最好的公式化问题,但我想实现的是,我有99%的对象来自数据库。在本例中,我使用AnonymousList从SQL中获取一些列,然后将其转换为实体对象 我已经用属性大小扩展了对象,以便能够指定数据库中对象的大小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
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();
}
}
}
}