c# - 将明细表行转列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
解决方案
这个查询应该做你想做的事,但我没有测试 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();
推荐阅读
- winforms - webbrowser 控件不能左对齐显示表格文本?
- c - For 循环随着计数器的增加而跳过
- c# - “xsi:type”属性改为“type” c# xml文档
- javascript - hasOwnProperty 未定义
- spring - 配置对象在测试类中为空
- django - 使用 django 中应用的令牌身份验证方法,我无法使用“POST”方法访问功能
- php - 使用数据表导入数据时出错
- reactjs - 反应 Form.Control 模型/值映射
- sql-server - 将格式化为 20200321 的 bigint 值转换为格式化为 '2020-03-21 00:00:00' 的日期时间
- node.js - 如何使用 Docker 映像将 Node.js HTTP/2 应用程序部署到 Google Compute Engine 上?