如何连接字符串与十进制

本文关键字:字符串 十进制 连接 何连接 | 更新日期: 2023-09-27 18:12:12

我在tbl_BillingTerm中有两列

  1. BTTitle (VARCHAR (MAX)
  2. BTBill(钱)

using (var db = new ClothEntities())
{
    var data = (from bterm in db.tbl_BillingTerm
                select new
                {
                    bterm.BTId,
                    BillingTerm = bterm.BTTitle +""+ bterm.BTBill+": USD/month"
                }).ToList();
}

我想要连接Title和Bill,正如我使用LINQ编码的那样。它正在生成一个错误:

> "Unable to cast the type 'System.Decimal' to type 'System.Object'.
   LINQ to Entities only supports casting EDM primitive or enumeration types."

如何连接字符串与十进制

代替do,

using (var db = new ClothEntities())
{
    var raw = (from bterm in db.tbl_BillingTerm
                select new
                {
                    bterm.BTId,
                    bterm.BTTitle,
                    bterm.BTBill
                }).ToList();
    var data = raw.Select(bterm => new
        {
            bterm.BTId,
            BillingTerm = string.Format(
                "{0} {1}: USD/month",
                bterm.BTTitle,
                bterm.BTBill)
        });
}

本质上,使用EF来获取数据,然后使用链接到对象进行笨拙的字符串操作。

ToList()之后的内容将不会被EF提供程序解释。


或者,如果您真的想在服务器端执行此操作,您可以尝试,

using (var db = new ClothEntities())
{
    var data = (from bterm in db.tbl_BillingTerm
         select new
         {
             bterm.BTId,
             BillingTerm =
                 bterm.BTTitle + " " + 
                 SqlFunctions.StringConvert(bterm.BTBill) 
                 + ": USD/month")
         });
}

这使用了SQLFunctions类,EF提供程序应该将其映射到适当的规范TSQL函数。

在这种情况下,我认为第二种方法没有什么价值。上面的拆分解决方案导致将更密集的结果集传输到客户端。与结果的第二次迭代相比,进程间通信的成本可能要高得多。

从int型到字符串型的转换没有映射到规范函数

如果这个错误阻止你继续,并且是一个小数据集,你可以通过枚举查询(调用ToList)来从数据库中检索。从那时起,你的操作将针对内存中的对象,你可能不会遇到你收到的错误。

using (var db = new ClothEntities())
{
    var result = (from bterm in db.tbl_BillingTerm
                select new
                {
                    bterm.BTId,
                    bterm.BTTitle,
                    bterm.BTBill
                }).ToList();
    var data = result.Select(bterm => new
        {
            bterm.BTId,
            BillingTerm = string.Format(
                "{0} {1}: USD/month",
                bterm.BTTitle,
                bterm.BTBill)
        });
}