防止在linq-to-sql中将数字转换为Scientifc表示法

时间:2019-04-03 10:06:05

标签: c# linq linq-to-sql

我有一个从数据库中获取数据的查询。我有一个DTO,其中包含类型为Price的属性string

var query = (from Users in _db.Users 
join pricing in _db.Prices
select new {
Username = Users.Name,
Price = pricing.Currency + " " + pricing.Amount
} ).AsEnumerable().Select(x => new UsersPrice 
{

Username = x.Username,
Price = x.Price
});

请注意,pricing.Amount在我的实体中是double类型,SQL Server中的字段是float。

数据库中的实际金额/值是12 565 467,但在上面的查询中,它的返回值为1.25655e+007。我该如何预防呢?我希望返回数据库中的实际值。请帮忙。

1 个答案:

答案 0 :(得分:3)

数据库中的实际值是一个数字。数字不包含格式-它们是正义数字。唯一相关的时间格式是将其转换为字符串即

Price = pricing.Currency + " " + pricing.Amount

所以;如果格式对您很重要,则通常必须使用ToString()指定特定的格式和区域性,告诉它当时想要的格式

为防止该工具尝试将其转换为TSQL(将不起作用),您可能希望将“获取数据”部分与“格式化数据”部分分开,即

var query = (from Users in _db.Users 
join pricing in _db.Prices
select new {
    Username = Users.Name,
    pricing.Currency, pricing.Amount
}).AsEnumerable().Select(x => new UsersPrice 
{
    Username = x.Username,
    Price = x.Currency + " " + x.Amount.ToString(...) // your choices here
});

这里相关的一点是,在 ORM 查询中,我刚刚选择了列,并且之后,AsEnumerable()我的代码是< em>格式化它们。