【问题标题】:spliting a string using linq queries in C# from fist name to last name在 C# 中使用 linq 查询将字符串从名字拆分为姓氏
【发布时间】:2020-04-14 00:25:17
【问题描述】:

名称将是单个字符串,例如 string 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}");
        }

【问题讨论】:

  • 你不说问题是什么,但如果p不是你想要的,不要select p。如果您想要“像字符串 NAME='BILL GATES' 这样的单个字符串”,那么请使用 select。此外,let clause 将简化您的 orderby 并提高效率。
  • 在 order by 中调用 Name.Split 不会保存拆分字符串,它只是拆分 Name 以便它可以将其用于 orderby,然后废弃该拆分字符串。您可以在选择 Name.Split()[0] 和 [1] 的查询中拆分它,也可以在查询完成后在 foreach 循环中拆分它。然后当你输出它时,你在使用名字之前使用姓氏。

标签: c# linq split


【解决方案1】:

正如 @BACON 在 cmets 中指出的那样,在使用 orderby 排序后,您需要 select 新名称(姓氏 + 名字)。此外,使用let 子句可以更轻松地存储拆分名称一次,这也更有效,因为您无需在每次要使用名称时重新拆分名称。

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

上面还使用$ - string interpolation 将姓氏插入到名字之前的一个空格分隔的字符串中。如果你愿意,你也可以在这里使用names[1] + " " + names[0]

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 问题是“我做错了什么?”您的答案应该专门解决​​这个问题,然后可以选择建议应该如何做。代码转储不是一个好的答案。
    • 我没有投反对票,但这并没有按照问题的要求和证明的方式执行排序。此外,这将是修复多余的Split() 调用的好机会。
    • @BACON - 在问题中提到的示例中,您想做:将单词 - “BILL GATES”更改为“GATES BILL”(您必须调用 Split() 两次),这就是我的代码在做。
    • 我不是问题的作者,但我认为它的意思是要对名字和姓氏进行重新排序除了已经存在的orderby编码。我想如果输出应该按姓氏然后名字排序,或者orderby 的使用只是试图生成新文本,这将是模棱两可的。此外,您无需多次致电Split(),这样做效率很低。
    • @בינהכהן - 那么orderby 究竟做了什么?您的答案仍然非常稀疏和不清楚。
    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多