pascalabcnet/TestSuite/lambdas_generics2.pas

68 lines
1.7 KiB
ObjectPascal
Raw Permalink Normal View History

2018-08-10 15:22:52 +03:00
uses System, System.Collections.Generic, System.Linq;
2015-05-14 22:35:07 +03:00
type Customer = class
public
Code: integer;
Name: string;
constructor (Code: integer; Name: string);
begin
self.Code := Code;
self.Name := name;
end;
end;
type Order = class
public
KeyCode: integer;
Product: string;
constructor (KeyCode: integer; Product: string);
begin
self.KeyCode := KeyCode;
self.Product := Product;
end;
end;
type Res1 = class
public
Name: string;
Collection: IEnumerable<Order>;
constructor (Name: string; Collection: IEnumerable<Order>);
begin
self.Name := Name;
self.Collection := Collection;
end;
end;
begin
var customers := new List<Customer>;
customers.Add(new Customer(5, 'Sam'));
customers.Add(new Customer(6, 'Dave'));
customers.Add(new Customer(7, 'Julia'));
customers.Add(new Customer(8, 'Sue'));
var orders := new List<Order>;
orders.Add(new Order(5, 'Book'));
orders.Add(new Order(6, 'Game'));
orders.Add(new Order(7, 'Computer'));
orders.Add(new Order(7, 'Mouse'));
orders.Add(new Order(8, 'Shirt'));
orders.Add(new Order(5, 'Underwear'));
var query := customers.GroupJoin(orders,
c -> c.Code,
o -> o.KeyCode,
(c; res) -> new Res1(c.Name, res));
var t := query.Select(x -> begin
result := x.Name + ' bought: ';
var bought := '';
foreach var item in x.Collection do
bought += item.Product + ' ';
result += bought;
end);
foreach var res in t do
begin
writeln(res);
end;
end.