[英]String.Format or toString not allowed in linq
以下代码不受欢迎,并引发以下错误。
LINQ to Entities无法识别方法'System.String Format(System.String,System.Object)',并且该方法无法转换为商店表达式。
在将运输方式的费用从十进制更改为零之前,我以前能够做到这一点吗? 到小数点。 我将其更改为十进制,然后开始引发错误,然后又将其更改为现在,但仍然不喜欢这样。 这里做错了什么。 我只是想使文本以-表示成本,然后将运输方法的名称串联起来。
var ShippingMethods = db.ShippingMethods.Select(x => new SelectListItem()
{
Text = x.Name + " - " + String.Format("c", x.Cost),
Value = x.Cost.ToString()
}).ToList();
您必须使用.AsEnumerable()以及从here
可以找到的原因
db.ShippingMethods.AsEnumerable().Select(x => new SelectListItem()
{
Text = x.Name + " - " + String.Format("c", x.Cost),
Value = x.Cost.ToString()
}).ToList();
如果考虑性能,则可以按如下所示使用它。如果我们从db
检索与ShippingMethods
表相关的所有行数据,然后在内存上进行projection
(在.AsEnumerable()
),则它会降低性能。下面的查询非常适合那些正在考虑EF查询性能的开发人员。
AsEnumerable()
将每个记录加载到application memory
,然后执行filtering
等操作(例如Where/Take/Skip
)。它将select * from MyTable, into the
内存中, then select the
前X个元素。
db.ShippingMethods.Select(x => new
{
Name = x.Name,
Cost = x.Cost,
}).AsEnumerable().Select(y => new SelectListItem()
{
Text = y.Name + " - " + String.Format("c", y.Cost),
Value = y.Cost.ToString()
}).ToList();
调用AsEnumerable(或ToList或ToArray)会将dbset的内容拉入内存,在其中可以对它们执行任何类型的操作。 有关转换为存储表达式的消息意味着linq提供程序无法将String.Format转换为SQL并在数据库级别运行它。
在这种情况下,在dbset上调用AsEnumerable可能很好,但是在您不想将整个表拉入内存的情况下,可以对其进行过滤,然后列出它,然后使用select对其进行转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.