Els*_*mer 5 asp.net-mvc-4 entity-framework-5
我正在研究MVC4和Entity Framework 5中的应用程序,最近在执行查询时遇到了这个异常.
{"LINQ to Entities无法识别方法'System.String PadLeft(Int32,Char)'方法,并且此方法无法转换为商店表达式."}
当我在过去遇到过类似的错误时,我只是在查询之外创建了一个变量,然后在LINQ语句中使用了该变量.不幸的是,在这种情况下,我正在操纵行结果,所以我不确定如何去做或如果这是最好的方法.任何帮助,将不胜感激.我的查询如下:
IQueryable<System.String> LEAPrograms = db.Datamart_Draft
.Where(where => where.snapshot_id == snapshot_id
&& !String.IsNullOrEmpty(where.entity_program))
.Select(sel => (sel.entity_program.PadLeft(PROGRAMLENGTH, '0'))).Distinct();
Run Code Online (Sandbox Code Playgroud)
Ger*_*old 12
这不是太优雅,但它做的工作:
...
.Select(sel => SqlFunctions.Replicate
("0", PROGRAMLENGTH - sel.entity_program.Length)
+ sel.entity_program)
Run Code Online (Sandbox Code Playgroud)
Els*_*mer -4
我最终创建了一个列表,然后迭代结果。当我在列表上执行 .Distinct() 时,它会将其转换回 IEnumerable。我不确定性能方面哪个更好,但经过一些努力,我认为可以为 LINQ to Entities 创建一个 PadLeft,它的功能大致相同。
IEnumerable<String> LEAPrograms = db.Datamart_Draft.Where(wh => wh.snapshot_id == snapshot_id && !String.IsNullOrEmpty(wh.entity_program)).Select(se => se.entity_program).Distinct();
// create and populate a List (because LINQ to Entities doesn't support PadLeft)
List<String> PaddedPrograms = new List<String>();
foreach (var row in LEAPrograms)
{
PaddedPrograms.Add(row.PadLeft(4, '0'));
}
LEAPrograms = PaddedPrograms.Distinct();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3181 次 |
| 最近记录: |