Réponse: Oui
Solution:
// GET: /Administration/
public ActionResult Index()
{
//Important Article
//http://stackoverflow.com/questions/4189730/get-object-out-of-list-tuple-object1-object2-and-store-in-viewmodel
//Methods that does the trick!!
var tuple = ListOfTuples_Orders_OrderDetails_Books_Carts_InventoryDetails_Authors_Genres();
// Instantiate new lists needed to add the 'to be' separated objects of each tuple
// Be aware of the objects order (keep in mind!!!) ....
List<Book> T1 = new List<Book>();
List<InventoryDetail> T2 = new List<InventoryDetail>();
List<Order> T3 = new List<Order>();
List<OrderDetail> T4 = new List<OrderDetail>();
List<Cart> T5 = new List<Cart>();
List<Author> T6 = new List<Author>();
List<Genre> T7 = new List<Genre>();
for (int i = 0; i < tuple.Count; i++)
{
var tuple = tuple[i];
T1.Add(tuple.Item1);
T2.Add(tuple.Item2);
T3.Add(tuple.Item3);
T4.Add(tuple.Item4);
T5.Add(tuple.Item5);
T6.Add(tuple.Item6);
T7.Add(tuple.Item7);
}
HomeTupleIndexViewModel tupleviewdata = new HomeTupleIndexViewModel()
{
Book = T1,
InventoryDetail = T2,
Order = T3 ,
OrderDetail= T4,
Cart =T5,
Author =T6,
Genre =T7,
};
return View(tupleviewdata);
//---------------------------
// Intermediate Window
//---------------------------
//
// tupleviewdata
//
// {WebshopDB.ViewModels.HomeTupleIndexViewModel}
// Author: Count = 2
// Book: Count = 2
// Cart: Count = 2
// Genre: Count = 2
// InventoryDetail: Count = 2
// Order: Count = 2
// OrderDetail: Count = 2
//---------------------------
}
private List<Tuple<Book, InventoryDetail, Order, OrderDetail, Cart, Author, Genre>>
ListOfTuples_Orders_OrderDetails_Books_Carts_InventoryDetails_Authors_Genres()
{
var list_of_tuples = new List<Tuple<Book, InventoryDetail, Order, OrderDetail, Cart, Author, Genre>>();
var accounting = webshopDB
.Books
.SelectMany(book => webshopDB.InventoryDetails, (book, inventorydetail) => new { book = book, inventorydetail = inventorydetail })
.SelectMany(temp0 => webshopDB.Orders, (temp0, order) => new { temp0 = temp0, order = order })
.SelectMany(temp1 => webshopDB.OrderDetails, (temp1, orderdetail) => new { temp1 = temp1, orderdetail = orderdetail })
.SelectMany(temp2 => webshopDB.Carts, (temp2, cart) => new { temp2 = temp2, cart = cart })
.SelectMany(temp3 => webshopDB.Authors, (temp3, author) => new { temp3 = temp3, author = author })
.SelectMany(temp4 => webshopDB.Genres, (temp4, genre) => new { temp4 = temp4, genre = genre })
.Where(temp5 => (temp5.temp4.temp3.temp2.temp1.temp0.book.BookId == temp5.temp4.temp3.temp2.temp1.temp0.inventorydetail.BookId))
.Where(temp5 => (temp5.temp4.temp3.temp2.temp1.order.OrderId == temp5.temp4.temp3.temp2.orderdetail.OrderId))
.Where(temp5 => (temp5.temp4.temp3.temp2.orderdetail.BookId == temp5.temp4.temp3.temp2.temp1.temp0.book.BookId))
.Where(temp5 => (temp5.temp4.temp3.temp2.temp1.temp0.book.BookId == temp5.temp4.temp3.cart.BookId))
.Where(temp5 => (temp5.temp4.temp3.temp2.temp1.temp0.book.AuthorId == temp5.temp4.author.AuthorId))
.Where(temp5 => (temp5.temp4.temp3.temp2.temp1.temp0.book.GenreId == temp5.genre.GenreId))
.Where(temp5 => (temp5.temp4.temp3.temp2.temp1.temp0.book.ShowInWebshop == true))
// I wanted the objects not the 'properties', so for educational reasons the .Select has been commented out ...
//.Select(temp5 => new { Title = temp5.temp4.temp3.temp2.temp1.temp0.book.Title,
// Price = temp5.temp4.temp3.temp2.temp1.temp0.book.Price,
// Quantity = temp5.temp4.temp3.temp2.temp1.temp0.inventorydetail.Quantity,
// ShowInWebshop = temp5.temp4.temp3.temp2.temp1.temp0.book.ShowInWebshop,
// Name = temp5.temp4.author.Name,
// DateCreated = temp5.temp4.temp3.cart.DateCreated,
// OrderDate = temp5.temp4.temp3.temp2.temp1.order.OrderDate,
// UnitPrice = temp5.temp4.temp3.temp2.orderdetail.UnitPrice })
; // <<< This 'little buggy thing' can easily be forgotten!!!
// Creating each tuple needs special care!!!
foreach (var item in accounting)
{
list_of_tuples.Add(Tuple.Create<Book, InventoryDetail, Order, OrderDetail, Cart, Author, Genre>(
(item.temp4.temp3.temp2.temp1.temp0.book),
(item.temp4.temp3.temp2.temp1.temp0.inventorydetail),
(item.temp4.temp3.temp2.temp1.order),
(item.temp4.temp3.temp2.orderdetail),
(item.temp4.temp3.cart),
(item.temp4.author),
(item.genre)));
}
return list_of_tuples;
//---------------------------
// Intermediate Window
//---------------------------
//
// list_of_tuples
//
// Count = 2
// [0]: {(WebshopDB.Models.Book,
// WebshopDB.Models.InventoryDetail,
// WebshopDB.Models.Order,
// WebshopDB.Models.OrderDetail,
// WebshopDB.Models.Cart,
// WebshopDB.Models.Author,
// WebshopDB.Models.Genre)}
// [1]: {(WebshopDB.Models.Book,
// WebshopDB.Models.InventoryDetail,
// WebshopDB.Models.Order,
// WebshopDB.Models.OrderDetail,
// WebshopDB.Models.Cart,
// WebshopDB.Models.Author,
// WebshopDB.Models.Genre)}
//---------------------------
}
Prochaine étape: Mise en place d'un Index.aspx avec des contrôles (années .ascx ou) >> conception partials l'étoffe d'administration, mais je suppose que ce ne sera pas être une grosse affaire .. Je suis heureux de partager!
Il s'agit d'un abus nuisible et tuple, pourquoi ne pas faire un type intermédiaire aplati? – jfar
Voir par exemple http://msdn.microsoft.com/en-us/library/system.tuple.aspx !! Tu vas apprendre ...!!! – KWHJ