希望获得有关.OrderBy和组/交叉联接的帮助

时间:2019-05-01 02:31:22

标签: c# linq

我在这里有两部分。首先,我要通过键的值来缩小类实例的列表。我已经做到了;但是,接下来,我将按照人的姓氏升序存储结果。除了名称字符串在值中包含名字和姓氏之外,我可能可以处理这个问题。如何通过名称字符串的姓氏对类的实例进行排序?我确定这是.OrderBy是解决方案的实例,但我不知道将其插入到.ToList()参数中的位置以及如何告诉编译器将哪个字符用于排序。

List<Customer> customers = new List<Customer>() {
  new Customer(){ Name="Bob Lesman", Balance=80345.66, Bank="FTB"},
  new Customer(){ Name="Joe Landy", Balance=9284756.21, Bank="WF"},
  new Customer(){ Name="Meg Ford", Balance=487233.01, Bank="BOA"},
  new Customer(){ Name="Peg Vale", Balance=7001449.92, Bank="BOA"},
  new Customer(){ Name="Mike Johnson", Balance=790872.12, Bank="WF"},
  new Customer(){ Name="Les Paul", Balance=8374892.54, Bank="WF"},
  new Customer(){ Name="Sid Crosby", Balance=957436.39, Bank="FTB"},
  new Customer(){ Name="Sarah Ng", Balance=56562389.85, Bank="FTB"},
  new Customer(){ Name="Tina Fey", Balance=1000000.00, Bank="CITI"},
  new Customer(){ Name="Sid Brown", Balance=49582.68, Bank="CITI"}
        };

List<ReportItem> millionaireReport = customers.Where(customer => customer.Balance >= 1000000).Select(customer => new ReportItem( customer.Name, customer.Bank )).ToList();

List<Bank> banks = new List<Bank>() {
  new Bank(){ Name="First Tennessee", Symbol="FTB"},
  new Bank(){ Name="Wells Fargo", Symbol="WF"},
  new Bank(){ Name="Bank of America", Symbol="BOA"},
  new Bank(){ Name="Citibank", Symbol="CITI"},
        };

练习的继续是Console.WriteLine,以“ {Customer.Name} at {Bank.Name}”的形式用银行名称代替缩写/股票代号。我们被告知阅读并尝试使用“组联接”或“交叉联接”。我已经阅读了示例,但仍在尝试理解。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

最困难的部分是弄清楚名字的哪一部分是“姓氏”部分,因为并非所有文化都一样(例如,有些顾客会有一个中间名或两个,另外一些文化也把他们的“姓氏” “第一)。

最简单的解决方案是:

customers.OrderBy(c=>c.Name.Split(' ')[1].ToUpper())

尽管这假定名称将始终采用以下格式:

$"{firstName} {lastName}"

,没有其他空格,也没有中间名。它还没有考虑“ McDouglas”之类的姓氏前缀

与银行名称匹配的银行符号:

foreach (var customer in customers)
{
    var bank = banks.FirstOrDefault(b=>string.Equals(b.Symbol, customer.Bank, StringComparison.OrdinalIgnoreCore)
    if (bank != default)
    {
        // your logic here
    }
}