简体   繁体   English

按字母顺序对 Linq 结果进行排序

[英]Sort Linq result in alphabetical order

I have List of name I need to sort in alphabetical order, but its not sorting as expected, its only bringing out similar alphabets together.我有我需要按字母顺序排序的名称列表,但它没有按预期排序,它只是将相似的字母组合在一起。

This is my code这是我的代码

[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);
    }

here is the result这是结果

{
    "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"
}

its not sorted in alphabetical order, please how do I solve this.它没有按字母顺序排序,请问我如何解决这个问题。 Is there a way I can make it start from AZ, just in alphabetical order?.有没有办法让它从 AZ 开始,只是按字母顺序?。 Thanks谢谢

As pointed by Aleks Andreev in the comment正如亚历克斯·安德烈耶夫在评论中指出的那样

Try cut spaces from lastName like OrderBy(s => s.LastName.Trim())尝试像OrderBy(s => s.LastName.Trim())一样从 lastName 中删除空格

I see that some of the strings in your data have a space at the beginning.我看到您数据中的某些字符串开头有一个空格。 You might want to trim the strings before sorting and returning them.您可能希望在排序和返回字符串之前修剪字符串。

Additionally, sorting in LINQ to Objects is case-sensitive, which may also be affected by the data in your database.此外,LINQ to Objects 中的排序区分大小写,这也可能受数据库中数据的影响。 Since you are still using LINQ to SQL (as per Panagiotis's comment), you may skip the ToLower() call and rely on database support.由于您仍在使用 LINQ to SQL(根据 Panagiotis 的评论),您可以跳过ToLower()调用并依赖数据库支持。

Here is how you can fix your code so that data are trimmed, and sorted in case-insensitive manner (mind the calls to Trim and ToLower):以下是修复代码的方法,以便修剪数据并以不区分大小写的方式排序(注意对 Trim 和 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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM