如何解决将详细表行转换为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
解决方法
下面的解决方案不是最好的解决方案,如果我们知道更多有关您使用的是哪种技术(.NET或.NETCore)的信息,可以对其进行改进,因此请回答上述问题,我们将为您提供更多帮助。目前,这是我能为您做的最好的事情:
var resultSet = (from orderItem in dataContext.OrderItem
join order in dataContext.Order on orderItem.OrderId equals order.OrderId
let firstItem = (from item in dataContext.Item
where item.ItemId == orderItem.ItemId1
select item).FirstOrDefault()
let secondItem = (from item in dataContext.Item
where item.ItemId == orderItem.ItemId2
select item).FirstOrDefault()
let thirdItem = (from item in dataContext.Item
where item.ItemId == orderItem.ItemId3
select item).FirstOrDefault()
let firstItemExists = firstItem != null
let secondItemExists = secondItem != null
let thirdItemExists = thirdItem != null
select new
{
OrderId = order.OrderId
OrderDate = order.OrderDate,Item1Name = firstItemExists
? firstItem.ItemName
: string.Empty
Item1Price = firstItemExists
? firstItem.ItemPrice
: null
Item2Name = secondItemExists
? secondItem.ItemName
: string.Empty
Item2Price = secondItemExists
? secondItem.ItemPrice
: null
Item3Name = thirdItemExists
? thirdItem.ItemName
: string.Empty
Item3Price = thirdItemExists
? thirdItem.ItemPrice
: null
});
,
此查询应能满足您的要求,但是我没有测试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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。