我在 tbl_BillingTerm 中有 2 列
- BTTitle (VARCHAR(MAX))
- 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();
}
我想连接标题和账单,如我使用 LINQ 编码所示。 它生成一个错误:
> "Unable to cast the type 'System.Decimal' to type 'System.Object'.
LINQ to Entities only supports casting EDM primitive or enumeration types."
最佳答案
相反,
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 获取数据,然后使用 linq-to-objects 进行笨拙的字符串操作。
EF 提供程序不会解释 ToList()
之后的所有内容。
或者,如果你真的想做这个服务器端,你可以尝试,
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 函数的类。
在这种情况下,我认为第二种方法没有什么值(value)。上面的拆分解决方案会导致将更密集的结果集传输到客户端。进程间通信的成本可能比结果的第二次迭代要高得多。
关于c# - 如何将字符串与小数连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24670903/