Sie sind auf Seite 1von 4

TP GestionProduits partie 2 :

2.1 Les méthodes anonymes :

namespace GP.Service
{
public class ManageProduct
{

List<Product> products;
public ManageProduct(List<Product> products)
{
this.products = products;

find = delegate (string l) //retourne la liste des produits dont la


première lettre passée en paramètre.
{
List<Product> list = new List<Product>();

foreach (Product p in products)


{
if (p.Name.StartsWith(l))
{
list.Add(p);
}

}
return list;
};
scan = delegate (Category category) //affiche la liste des produits
appartenant à une catégorie donnée.
{
foreach (Product p in products)
{
if (p.Category.Equals(category.Name))
{
p.getDetails();
}
}
};
}
public List<Product> FindProduct(string l, Func<string, List<Product>>
find)
{
return find(l);
}
public void ScanProduct(Category category, Action<Category> scan)
{
scan(category);
}

public Func<string,List<Product>> find;


public Action<Category> scan;
}
}

2.2 : Les expressions lambda :


**Dans le programme principale :
ManageProduct productmanager = new ManageProduct(products); // il m'a affiché une
erreur disant que le nom "products" n'existe pas dans le contexte actuel.
ManageProduct.FindProduct("b", (string l) =>
{
List<Product> list = new List<Product>();

foreach (Product p in products) //même erreur ici aussi.


{
if (p.Name.StartsWith(l))
{
list.Add(p);
}

}
return list;
});

ManageProduct.ScanProduct("nomCategory",(Category category) =>


{
foreach (Product p in products)
{
if (p.Category.Equals(category.Name))
{
p.getDetails();
}
}
});

2.3 Formuler des requêtes avec le langage LINQ :

namespace GP.Service
{
public class ManageProvider
{
List<Provider> providers = new List<Provider>();
public ManageProvider(List<Provider> providers)
{
this.providers = providers;
}
public List<Provider> GetProviderByName(string name)
{
var namequery = from p in providers
where p.UserName.Contains(name)
select p;
return namequery.ToList();

public Provider GetFirstProviderByName(string name)


{
var query = from p in providers
where p.UserName.Contains(name)
select p;
return query.FirstOrDefault();
}

public Provider GetProviderById(int id)


{
var idquery = from p in providers
where p.Id == id
select p;
return idquery.SingleOrDefault();
}
}
}

**ManageProduct :

public IEnumerable<Product> Get5Chemical(double price)


{
var query = from p in products
where p is Chemical && p.Price > price
select p;
return query.Take(5);
}

public IEnumerable<Product> GetProductPrice(double price)


{
return products.Where(p => p is Chemical && p.Price > price).Skip(2);
}

public double GetAveragePrice()


{
var query = from p in products
select p.Price;
return query.Average();
}

public double GetMaxPrice()


{
var query = from p in products
select p.Price;
return query.Max();
}

public double GetCountProduct(string city)


{
var query = from p in products
where p is Chemical && ((Chemical)p).City.Equals(city)
select p;
return query.Count();
}

public IEnumerable<Product> GetChemicalCity()


{
var query = from p in products
where p is Chemical
orderby ((Chemical)p).City
select p;
return query;
}

public void GetChemicalGroupByCity()


{
var query = from p in products
where p is Chemical
orderby ((Chemical)p).City
group p by ((Chemical)p).City;

foreach(var group in query)


{
Console.WriteLine(group.Key);

foreach (var g in group)


g.getDetails();

}
}

2.4 Les méthodes d'extension :

namespace GP.Service
{
public static class ProductExtension
{
public static void UpperName(this ManageProduct mp, Product p)
{
p.Name.ToUpper();
}
public static bool InCategory(this ManageProduct mp, Product p,Category
category)
{
if (p.Category.Equals(category))
{
return true;
}
else
return false;
}
}
}

Das könnte Ihnen auch gefallen