разделение строки с помощью запросов linq в C# от первого имени до фамилии - PullRequest
0 голосов
/ 14 апреля 2020

Имя будет одной строкой наподобие строки NAME = "BILL GATES", план состоит в том, чтобы заказать его сначала по фамилии, а затем по фамилии, так что, Гейтс Билл, происходит то, что он выходит первым и последним.

var Q4 = from p in persons
                 orderby p.Name.Split()[1], p.Name.Split()[0]
                 select p;
        foreach (var Item in Q4) 
        {
            Console.WriteLine($"{Item}");
        }

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Как указано в комментариях @ BACON , вам необходимо select новое имя (фамилия + имя) после сортировки с помощью orderby. Кроме того, это можно упростить, сохраняя разделенные имена один раз, с помощью предложения let, что также более эффективно, поскольку вам не нужно повторно разделять имена каждый раз, когда вы хотите их использовать.

var Q4 = from p in persons
         let names = p.Name.Split()
         orderby names[1], names[0]
         select new { Name = $"{names[1]} {names[0]}" };

Выше также используется $ - интерполяция строки для вставки фамилии перед именем в строку, разделенную пробелом. Вы также можете использовать names[1] + " " + names[0] здесь, если хотите.

1 голос
/ 14 апреля 2020

orderby не заменит содержимое в «Имя». Если вы хотите изменить содержимое, используйте select new:

       var Q4 = from p in persons
                select new
                {
                    name = p.name.Split()[1] +" "+ p.name.Split()[0]
                };

        foreach(var Item in Q4)
        {
              Console.WriteLine($"{Item}");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...