【问题标题】:LINQ Select formatted values as a LISTLINQ 选择格式化值作为 LIST
【发布时间】:2016-11-04 08:13:45
【问题描述】:

我正在尝试获取列值并将其转换为格式化字符串值列表,我尝试了以下代码

List<string> _names = (from p in context.RakHolders select 
    string.Format("{0},{1}",  p.Name.Split(',')[0].Trim(), p.Name.Split(',')[1].Trim()))
    .ToList();

我的目的是在名称列中获取一个名称列表,其中逗号之间没有多余的空格

我在执行这一行时遇到异常

“System.NotSupportedException”类型的异常发生在 EntityFramework.SqlServer.dll 但未在用户代码中处理

附加信息:LINQ to Entities 无法识别该方法
'System.String Format(System.String, System.Object, System.Object)' 方法, 而且这个方法不能翻译成store表达式。

如何使用 LINQ 完成这项工作 [获取格式化的列值列表]

【问题讨论】:

  • 由于无法翻译成T-SQL,Linq to Entities 无法识别。在RakHolders 之后添加AsEnumerable() 可能会有所帮助。检查这个stackoverflow.com/questions/34061637/…
  • 尝试在context.RakHolders之后添加.AsEnumerable()

标签: c# linq


【解决方案1】:
List<string> _names = (from p in context.RakHolders select p.Name)
    .ToList()
    .Select(name => name.Split(','))
    .Select(nameSplitted => string.Format("{0},{1}",  nameSplitted[0].Trim(), nameSplitted[1].Trim() ))
    .ToList();

解释:'string.Format' 不能被翻译成 SQL,所以首先我们需要用第一个 'ToList()' 实现列表(这里我们得到名称列表,它比实现完整实体更有效)。将列表保存在内存中,您可以将其转换为您需要的形式。

【讨论】:

    【解决方案2】:

    EF 正在尝试在 SQL-Server 上执行表达式。如果您先获取项目,则应该没有问题:

    List<string> _names = context.RakHolders
        .Select(r => r.Name)
        .ToList()
        .Select(p => p.Split(','))
        .Select(s => string.Format("{0},{1}", s[0].Trim(), s[1].Trim())
        .ToList();
    

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多