Mam listę nazw, które muszę sortować w kolejności alfabetycznej, ale nie jest sortowanie zgodnie z oczekiwaniami, jedynie doprowadzenie podobnych alfabetów.

To jest mój kod

[Route("api/getdeptemployee/{Id}")]
    [HttpGet]
    public IActionResult GetDepartmentEmp(int Id)
    {
        var item = (from o in db.Employee
                    join a in db.Department on o.DepartmentId equals a.Id
                    where a.Id == Id
                    select new
                    {
                        Id = o.Id,
                        LastName = o.LastName,
                        AddedBy = o.LastName + " " + o.FirstName
                    }).OrderBy(s => s.LastName).ToList();
        return Json(item);
    }

Oto wynik

{
    "id": 2277,
    "lastName": " IBIRONKE",
    "addedBy": " IBIRONKE ABIMBOLA "
},
{
    "id": 2278,
    "lastName": " IGBINOBA",
    "addedBy": " IGBINOBA PATRICIA"
},
{
    "id": 2279,
    "lastName": " IRUBOR",
    "addedBy": " IRUBOR CATHERINE "
},
{
    "id": 2276,
    "lastName": " KOLAWOLE",
    "addedBy": " KOLAWOLE SEGUN"
},
{
    "id": 2281,
    "lastName": " LAMPTEY",
    "addedBy": " LAMPTEY JOSEPH"
},
{
    "id": 2282,
    "lastName": " OJEDIRAN",
    "addedBy": " OJEDIRAN OLUWASEYI "
},
{
    "id": 2283,
    "lastName": "ADEBANJO",
    "addedBy": "ADEBANJO ABAYOMI "
},
{
    "id": 2296,
    "lastName": "ADENIYI",
    "addedBy": "ADENIYI ONI"
},
{
    "id": 2284,
    "lastName": "ADEPOJU",
    "addedBy": "ADEPOJU ABAYOMI "
},
{
    "id": 2297,
    "lastName": "AFOLABI-ONI",
    "addedBy": "AFOLABI-ONI OLUFUNKE "
},
{
    "id": 2285,
    "lastName": "AGBOM",
    "addedBy": "AGBOM MAURICE"
},
{
    "id": 2293,
    "lastName": "AKPU-AGBAKA",
    "addedBy": "AKPU-AGBAKA BYRON"
},
{
    "id": 2286,
    "lastName": "ASUQUO",
    "addedBy": "ASUQUO NAOMI "
},
{
    "id": 2299,
    "lastName": "AYI-SAMUEL",
    "addedBy": "AYI-SAMUEL BLESSING"
},
{
    "id": 2298,
    "lastName": "ECHEBIRI",
    "addedBy": "ECHEBIRI JUSTINE"
},
{
    "id": 2287,
    "lastName": "EDET ",
    "addedBy": "EDET  NSIKAK "
},
{
    "id": 2292,
    "lastName": "EZE",
    "addedBy": "EZE FAVOUR "
},
{
    "id": 2289,
    "lastName": "JABE",
    "addedBy": "JABE AJOM"
},
{
    "id": 2288,
    "lastName": "MADUNECHE",
    "addedBy": "MADUNECHE CHIDI "
},
{
    "id": 2280,
    "lastName": "MUSTAPHA",
    "addedBy": "MUSTAPHA TRACY "
},
{
    "id": 2274,
    "lastName": "OLAWOYIN",
    "addedBy": "OLAWOYIN KELECHI "
},
{
    "id": 2290,
    "lastName": "ONAA",
    "addedBy": "ONAA JAMES "
},
{
    "id": 2275,
    "lastName": "SORINWA",
    "addedBy": "SORINWA OLUFUNKE "
},
{
    "id": 2295,
    "lastName": "UGBE",
    "addedBy": "UGBE JOHN-PAUL"
},
{
    "id": 2294,
    "lastName": "UWAH",
    "addedBy": "UWAH FRANCIS"
},
{
    "id": 2291,
    "lastName": "ZOCLI",
    "addedBy": "ZOCLI ANDREW"
}

Nie jest posortowany w porządku alfabetycznym, proszę, jak to rozwiązać. Czy istnieje sposób, w jaki mogę zacząć od A-Z, tylko w porządku alfabetycznym?. Dzięki

1
Emmanuel Ikechukwu 1 marzec 2019, 16:02

2 odpowiedzi

Najlepsza odpowiedź

Jak wskazywał Aleks andreev w komentarzu

Spróbuj przeciąć spacje z nazwiska jak OrderBy(s => s.LastName.Trim())

1
Magnus 1 marzec 2019, 13:40

Widzę, że niektóre struny w twoich danych mają miejsce na początku. Możesz przyciąć struny przed sortowaniem i zwróceniem ich.

Dodatkowo, sortowanie w Linq do obiektów jest rozróżniana wielkość liter, która może być również dotknięta danymi w bazie danych. Ponieważ nadal używasz Linq do SQL (zgodnie z komentarzem Panagiotis), możesz pominąć ToLower() połączenie i polegać na wsparciu bazy danych.

Oto sposób, w jaki możesz naprawić swój kod, aby dane były przycięte i posortowane w sposób niewrażliwy na pewno (umyślne połączenia do przycinania i tolower):

[Route("api/getdeptemployee/{Id}")]
[HttpGet]
public IActionResult GetDepartmentEmp(int Id)
{
    var item = (from o in db.Employee
                join a in db.Department on o.DepartmentId equals a.Id
                where a.Id == Id
                select new
                {
                    Id = o.Id,
                    LastName = o.LastName.Trim(),
                    AddedBy = o.LastName.Trim() + " " + o.FirstName.Trim()
                }).OrderBy(s => s.LastName.ToLower()).ToList();
    return Json(item);
}
0
Zoran Horvat 1 marzec 2019, 13:25