以下代码不受欢迎,并抛出以下错误。
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();
答案 0 :(得分:3)
您必须使用.AsEnumerable()以及here
db.ShippingMethods.AsEnumerable().Select(x => new SelectListItem()
{
Text = x.Name + " - " + String.Format("c", x.Cost),
Value = x.Cost.ToString()
}).ToList();
答案 1 :(得分:2)
如果您考虑效果,那么您可以使用它,如下所示.B' cos,如果我们从{{1}检索与ShippingMethods
表相关的所有行数据然后对内存执行db
(在projection
之后)意味着它会严重降低性能。下方查询适用于考虑EF查询性能的开发人员。
<强> AsEnumerable()强>
将每条记录加载到.AsEnumerable()
,然后执行application memory
等等(例如filtering
)。它将Where/Take/Skip
内存{ {1}}第一个X元素。
select * from MyTable, into the
答案 2 :(得分:0)
调用AsEnumerable(或ToList或ToArray)将dbset的内容拉入内存,在内存中可以对它们执行任何类型的操作。有关转换为存储表达式的消息意味着linq提供程序无法将String.Format转换为SQL并在数据库级别运行它。
在这种情况下,在dbset上调用AsEnumerable很可能,但是在你不想将整个表拉入内存的情况下你会过滤它,然后列出它,然后用select转换它