[備忘録] C#のクエリ式を使って練習問題を解いてみました

[備忘録] C#のクエリ式を使って練習問題を解いてみました

練習問題 (by chatGPT) 

record User(int Id, string Name, int Age);
record Order(int Id, int UserId, string Item, int Price, DateTime OrderedAt);
record Review(int Id, int UserId, string Item, int Stars); // 1〜5

var users = new List<User> {
    new(1,"Alice",29), new(2,"Bob",17), new(3,"Carol",35),
    new(4,"Dave",29), new(5,"Eve",41)
};

var orders = new List<Order> {
    new(101,1,"Book",1200, new DateTime(2025,10,01)),
    new(102,1,"Mouse",2500, new DateTime(2025,10,05)),
    new(103,2,"Game",6800, new DateTime(2025,10,08)),
    new(104,3,"Desk",12000,new DateTime(2025,10,09)),
    new(105,3,"Pen",200,   new DateTime(2025,10,10)),
    new(106,4,"Chair",8000,new DateTime(2025,10,12)),
    new(107,4,"Cable",900, new DateTime(2025,10,14)),
    new(108,5,"Desk",11000,new DateTime(2025,10,15))
};

var reviews = new List<Review> {
    new(201,1,"Book",4), new(202,1,"Mouse",5), new(203,2,"Game",3),
    new(204,3,"Desk",5), new(205,4,"Chair",4) // Eveのレビューは無し
};

回答例


// users から 20歳以上の Name を アルファベット順で並べ、ToArray()を使う

var adult = (from u in users
             where u.Age >= 20
             orderby u.Name
             select u.Name).ToArray();
  
// orders から 価格が1000未満の注文の (Item, Price) を Price 昇順で列挙

var order = (from u in orders
             where u.Price < 1000
             orderby u.Price
             select new {u.Item, u.Price}).ToArray();