【问题标题】:Need to split a column into two需要将一列分成两列
【发布时间】:2012-04-11 23:59:19
【问题描述】:

我有 WCF 服务。

我有一个字段(比如名称),现在客户想要将其更改为名字(空格前的前半部分)和姓氏(空格后的所有内容)。

这个 WCF 服务正被不同的应用程序使用,我想在不破坏任何现有客户端的情况下完成这项工作。

我可以添加两个新的数据成员,即使它们在数据库中不存在?如何为这两个新数据成员设置或获取值?

谢谢

【问题讨论】:

  • 请记住,这是一件很难正确完成的事情。如果某人的姓氏中有空格,例如Mark Van Duser 或首字母缩写E. F. Codd,该怎么办?
  • 是的,或者如果你有一个只有一个名字的人,比如很多来自非洲的足球运动员......你可能想在尝试分割之前检查是否有空格,并且然后考虑是否要在 FirstName 或 SecondName 中使用它

标签: c# asp.net sql-server wcf


【解决方案1】:

这样的事情应该可以工作:

DECLARE @FullName VARCHAR(255)
SET @FullName = 'James Johnson'

SELECT SUBSTRING(@FullName, 1, CHARINDEX(' ', @FullName) - 1) AS FirstName,
       SUBSTRING(@FullName, CHARINDEX(' ', @FullName) + 1, LEN(@FullName)) AS LastName

上面的输出如下所示:

名字姓氏 ------------ ---------------- 约翰·多伊

要解析代码中的姓名,下面的代码示例应该可以很好地处理名字和姓氏。如果您需要一个可以处理前缀、后缀和中间名的强大解析器,请查看this article

var names = ("James Johnson").Split(Convert.ToChar(" "));
if (names.Length > 0)  
    Response.Write(string.Format("First: {0}, Last: {1}", names[0], names[1]));

【讨论】:

  • 我想在中间层执行这个
【解决方案2】:

如果新数据成员是字符串,那么这应该没问题,旧版本的服务客户端将忽略其他数据成员。

查看这个相关问题: Adding field to WCF data contract breaks clients?

【讨论】:

  • 添加列应该没问题,但是检索数据怎么样。我有以下数据成员 [DataMember] public string Name { get;放; }。我现在如何添加这两个新数据成员?
  • 将它们添加为 [DataMember] public string FirstName { get;放; }, [DataMember] public string Surname { get;放; }(或类似),然后更新您的数据访问层以相应地填充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
相关资源
最近更新 更多