Я создаю проект ASP.NET, и у меня есть CustomerModel, созданный Entity Framework (потому что сначала база данных). Я пытаюсь манипулировать полем Name, чтобы разделить его на FirstName и LastName соответственно. Вот моя модель:
public partial class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
...
// something like this?
// I know this will cause an error though
FirstName = Name.Substring(0, Name.IndexOf(" "));
Прав ли я, когда манипулирую им вот так? Также это повлияет на что-либо, когда я, например, создаю данные, и значение переходит в переменную, а не в поле.
Возможный дубликат Как разделить строку полного имени на строку имени и фамилии?
Я спрашиваю о разделении данных, которые я получаю от модели, не обязательно о том, как правильно разделить строку. Я просто привел это в качестве примера
Лучше всего сделать отдельные поля для firstName и lastName.
Наверное, мне следовало сказать это в своем ответе, но вы можете оставить все как есть. С культурной точки зрения нечувствительно пытаться принуждать людей использовать западный стандарт для своего имени. И когда вы пошли в одну сторону, это все равно, что пытаться превратить гамбургер в корову.
Жаль Билли Джин Кинг.





Можно пойти с string.Split().
Например:
string name = "Gabe Newel";
string FirstName = name.Split(" ")[0];
string LastName = name.Split(" ").Last();
Откуда вы знаете, что человек не вводит три или четыре имени? У многих людей есть отчество. Как бы вы поступили с этим логически? А как насчет людей с именами, в которых фамилия состоит из двух частей, например, Ван Пелт или Сент-Джеймс?
Если вы можете каким-то образом определить это, вы можете использовать логику в своем сеттере для свойства Name. Когда он будет установлен, разделите его на различные части. Вот простой пример:
public class NameExample
{
private string name;
private string firstName;
private string lastName;
public string Name
{
get { return name; }
set
{
if ( value != name )
{
name = value;
if (string.IsNullOrEmpty(name)) return;
var names = name.Split(' ');
firstName = names[0];
if (names.Length > 1) lastName = names[1]; // Is our person Cher? ;-)
}
}
}
public string FirstName
{
get
{
return firstName;
}
set
{
firstName = value;
name = firstName + (string.IsNullOrEmpty(lastName) ? "" : " " + lastName);
}
}
public string LastName
{
get => lastName;
set {
lastName = value;
name = firstName + (string.IsNullOrEmpty(lastName) ? "" : " " + lastName);
}
}
Вы можете сделать это с помощью Entity Framework, поскольку он фактически вызывает установщики свойств при загрузке значений из базы данных. И он вызывает геттеры, чтобы получить значения для записи в базу данных. Вот почему вы должны использовать общедоступные свойства вместо общедоступных полей для моделей предметной области.
Мой пример намеренно многословен и быстр. Вы можете настроить его как хотите.
Для меня это только подтверждает, что это безнадежное усилие. А как насчет людей, имеющих два (или более) имени? Или китайские имена? Единственный шанс OP - получить части имени отдельно от человека (прямо или косвенно).
вам, вероятно, будет легче с
string.Split