首页 > 解决方案 > 将明细表行转列linq转sql lambda表达式(主明细关系)

问题描述

假设我们有一个主从关系如下

**Order Table**
   OrderId
   OrderDate

**OrderItem Table**
   OrderItemId
   OrderId 
   ItemId1
   Price1
   ItemId2
   Price2
   ItemId3
   Price3


**Item Table**
    ItemId
    ItemName 

每个订单最多可以有 3 个订单项目。因此,OrderItem 表的设计如上。如何编写给出以下输出的 LINQ to SQL lambda 表达式?

OrderId -- OrderDate -- Item1Name -- Item1Price -- Item2Name -- Item2Price -- Item3Name -- Item3Price
 1          8/27/2020    Item1        30            Item2        40
 2          8/27/2020    Item1        20            Item5        15            Item8        40
 3          8/27/2020    Item4        30

标签: c#linq-to-sql

解决方案


这个查询应该做你想做的事,但我没有测试 LINQ to SQL 是否可以翻译它:

var ans = (from o in Orders
           join oi in OrderItems on o.OrderId equals oi.OrderId
           join i1 in Items on oi.ItemId1 equals i1.ItemId into i1j
           from i1 in i1j.DefaultIfEmpty()
           join i2 in Items on oi.ItemId2 equals i2.ItemId into i2j
           from i2 in i2j.DefaultIfEmpty()
           join i3 in Items on oi.ItemId3 equals i3.ItemId into i3j
           from i3 in i3j.DefaultIfEmpty()
           select new {
               o.OrderDate,
               Item1Name = i1.ItemName,
               Item1Price = oi.Price1,
               Item2Name = i2.ItemName,
               Item2Price = oi.Price2,
               Item3Name = i3.ItemName,
               Item3Price = oi.Price3,
           })
          .ToList();

推荐阅读