LINQ选择格式化的值作为LIST

时间:2016-11-04 08:13:46

标签: c# linq

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

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

我的目的是获取列名称

中逗号之间没有不需要空格的名称列表

我在执行此行时遇到异常

  

类型&#39; System.NotSupportedException&#39;的例外情况发生在       EntityFramework.SqlServer.dll但未在用户代码中处理

     

附加信息:LINQ to Entities无法识别方法
      &#39; System.String格式(System.String,System.Object,System.Object)&#39;方法,       并且此方法无法转换为商店表达式。

如何使用LINQ

使这项工作[获取格式化列值列表]

2 个答案:

答案 0 :(得分:3)

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();

说明:&#39; string.Format&#39;无法转换为SQL所以首先我们需要使用第一个ToList()&#39;来实现列表。 (这里我们得到名单,它比实现完整实体更有效)。将列表放在内存中,您可以将其转换为您需要的格式。

答案 1 :(得分:1)

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();