C# 无法将类型decimal转换为double

C# 无法将类型decimal转换为double,c#,entity-framework,linq,web-services,C#,Entity Framework,Linq,Web Services,我有一个简单的web服务,通过实体框架调用sql视图表。我可以将所有的列都设置为字符串格式,但不能将列设置为数值格式,比如SQL中的UID_NUM(numeric(38,8),null)。我有AddressALL类来设置如下列,并在LINQ中的p.UID_NUM处出错 public class GISAddressWebService : System.Web.Services.WebService { [WebMethod] public AddressALL[] getA

我有一个简单的web服务,通过实体框架调用sql视图表。我可以将所有的列都设置为字符串格式,但不能将列设置为数值格式,比如SQL中的UID_NUM(numeric(38,8),null)。我有AddressALL类来设置如下列,并在LINQ中的p.UID_NUM处出错

public class GISAddressWebService : System.Web.Services.WebService
{
     [WebMethod]
     public AddressALL[] getAddress()
     {
         try
         {
             List<view_COBADDRESS> address = new List<view_COBADDRESS>();
             using (GISAddressEntities database = new GISAddressEntities())
             {
                 return database.view_COBADDRESS
                        .Where(p => p.UNIT_NUM == "103")
                        .Select(p => new AddressALL { UID_NUM = p.UID_NUM, ADD_FULL = p.ADD_FULL, POSTALCITY = p.POSTALCITY, ZIP5 = p.ZIP5}).ToArray();
             }
         }
         catch (Exception)
         {
             return null;
         }
     }
}

public class AddressALL
{
     public double UID_NUM { get; set; }
     public string TLID { get; set; }
     public string ADD_FULL { get; set; }
     public string POSTALCITY { get; set; }
     public string STATE { get; set; }
     public string ZIP5 { get; set; }
     public string IN_OUT { get; set; }

}
公共类GISAddressWebService:System.Web.Services.WebService
{
[网络方法]
公共地址所有[]getAddress()
{
尝试
{
列表地址=新列表();
使用(GISAddressEntities数据库=新的GISAddressEntities())
{
返回database.view\u地址
.其中(p=>p.UNIT_NUM==“103”)
.Select(p=>newaddressAll{UID_NUM=p.UID_NUM,ADD_FULL=p.ADD_FULL,POSTALCITY=p.POSTALCITY,ZIP5=p.ZIP5}).ToArray();
}
}
捕获(例外)
{
返回null;
}
}
}
公共类地址
{
公共双UID_NUM{get;set;}
公共字符串TLID{get;set;}
公共字符串ADD_FULL{get;set;}
公共字符串POSTALCITY{get;set;}
公共字符串状态{get;set;}
公共字符串ZIP5{get;set;}
公共字符串输入输出{get;set;}
}


显而易见的解决方案,而不是

.Select(p => new AddressALL
        {
            UID_NUM = p.UID_NUM,
            ADD_FULL = p.ADD_FULL,
            POSTALCITY = p.POSTALCITY,
            ZIP5 = p.ZIP5
        });

在select语句
.select(p=>newaddressall{…})
中,您正在执行一个任务,试图为每个
p
选择一个类型为
AddressALL
的新对象,并且您正在使用对象初始值设定项语法
{…}
将源对象的属性
p
与目标类型的属性匹配
AddressALL


但是,您的错误消息表明您的
p.UID\u NUM
类型为
decimal
,而
AddressALL
上的
UID\u NUM
属性类型为
double
。因此,您必须将值转换为必要的目标类型。

显而易见的解决方案,而不是

.Select(p => new AddressALL
        {
            UID_NUM = p.UID_NUM,
            ADD_FULL = p.ADD_FULL,
            POSTALCITY = p.POSTALCITY,
            ZIP5 = p.ZIP5
        });

在select语句
.select(p=>newaddressall{…})
中,您正在执行一个任务,试图为每个
p
选择一个类型为
AddressALL
的新对象,并且您正在使用对象初始值设定项语法
{…}
将源对象的属性
p
与目标类型的属性匹配
AddressALL


但是,您的错误消息表明您的
p.UID\u NUM
类型为
decimal
,而
AddressALL
上的
UID\u NUM
属性类型为
double
。因此,您必须将值转换为必要的目标类型。

十进制的有效数字比双精度的有效数字多,因此它可以更精确,并且占用略多的内存。由于这种差异,fou必须通过(double)p.UID_NUM显式编程这种类型的更改。

十进制的有效数字比double的有效数字多,因此它可以更精确,并且占用略多的内存。由于这种差异,我们必须通过(double)p.UID_NUM显式编程此类型更改。

您的代码不会出现编程错误,但不会返回值。您的代码不会出现编程错误,但不会返回值。为什么不使用(double)p.UID_NUM?谢谢Jeroen。它起作用了!如果你把你的评论放在回答中,我会把它标记为已回答。有没有办法选择全部而不是列出所有列?不清楚你想做什么。看看这个网站。或者看看一个框架,比如为什么不使用(double)p.UID_NUM?谢谢Jeroen。它起作用了!如果你把你的评论放在回答中,我会把它标记为已回答。有没有办法选择全部而不是列出所有列?不清楚你想做什么。看看这个网站。或者看一个框架,比如当我省略UID\u NUM=Convert.ToDouble(p.UID\u NUM)时,它返回我期望的值,但使用UID\u NUM时,它只返回程序错误。当我省略UID\u NUM=Convert.ToDouble(p.UID\u NUM)时,它返回我期望的值,但使用UID\u NUM,它不返回任何内容,但没有程序错误。是否有方法选择全部而不是列出所有列?是否有方法选择全部而不是列出所有列?
.Select(p => new AddressALL
        {
            UID_NUM = Convert.ToDouble(p.UID_NUM),
            ADD_FULL = p.ADD_FULL,
            POSTALCITY = p.POSTALCITY,
            ZIP5 = p.ZIP5
        });