Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 使用元组技术连接两个以上的表(强类型)_Linq_Linq To Sql_Linq To Entities - Fatal编程技术网

Linq 使用元组技术连接两个以上的表(强类型)

Linq 使用元组技术连接两个以上的表(强类型),linq,linq-to-sql,linq-to-entities,Linq,Linq To Sql,Linq To Entities,根据这篇文章,可能吗 使用元组技术分隔两个以上的表 目标:连接7个表(用于管理目的) 回答:是的 解决方案: // GET: /Administration/ public ActionResult Index() { //Important Article //http://stackoverflow.com/questions/4189730/get-object-out-of-list-tuple-object1-object2-and-store-in-viewmodel

根据这篇文章,可能吗

使用元组技术分隔两个以上的表

目标:连接7个表(用于管理目的)

回答:是的

解决方案:

// 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)}
  //---------------------------         
}
//获取:/Administration/
公共行动结果索引()
{
//重要文章
//http://stackoverflow.com/questions/4189730/get-object-out-of-list-tuple-object1-object2-and-store-in-viewmodel
//方法,这样做的诀窍!!
var tuple=ListOfTuples\u Orders\u OrderDetails\u Books\u Carts\u InventoryDetails\u Authors\u Genres();
//实例化添加每个元组的“待分离”对象所需的新列表
//注意物品的顺序(记住!!!)。。。。
列表T1=新列表();
列表T2=新列表();
列表T3=新列表();
列表T4=新列表();
列表T5=新列表();
列表T6=新列表();
列表T7=新列表();
for(int i=0;iwebshopDB.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})
.其中(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))
.其中(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))
//我想要的是对象而不是“属性”,因此出于教育原因,.Select已被注释掉。。。
//.Select(temp5=>new{Title=temp5.temp4.temp3.temp2.temp1.temp0.book.Title,
//价格=temp5.temp4.temp3.temp2.temp1.temp0.book.Price,
//数量=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,
//单价=temp5.temp4.temp3.temp2.orderdetail.UnitPrice})

当然,我可以想象人们会“睁大眼睛,甚至说“哇”……注意到私人方法中的lambda结构。但我会说:坐下来,喝杯茶或随便什么……再看看,它不会那么害怕了,至少我做到了!!这是有害的和元组滥用,为什么不做一个平底的平底锅呢体育?比如看!!你会学到。。。!!!