我有3张桌子。
我的要求是这样的:
如果用户订购了Novemeber,请显示Novemeber订单,否则显示10月份的订单。
目前我正在做的是
foreach(user)
{
join User table with MonthsMap table where month = november
if( result is null )
{
join User table with MonthsMap table where month = october join order table to get October order details
}
else
{
join User table with MonthsMap table where month = november join order table to get november order details
}
}
循环用于迭代每个用户需要很多时间。我正在使用Linq to SQL,并且有任何更好的Linq选项,我可以使用它来获取所有用户;单个查询中的顺序。
感谢您的所有答案,但很抱歉我的例子让您感到困惑。确切的情况是这样的,用户可以有不同类型的订单(例如: - 正常订单和紧急订单)。所以现在而不是months_map表我将使用订单映射表(字段用户ID,order_type(“正常/紧急/非常紧急”),order_id)
所以我的应用程序必须列出用户表中所有用户的订单。
列表应该是
答案 0 :(得分:0)
我猜你需要共同的最后/前几个月,而不是十月十一月/十一月。如果是,则使用以下算法:
从Users / MonthMap / OrdersTable的内部联接中选择*,其中OrderTable.MonthNo =当前用户的OrderTable.MonthNo的最大值。
var result =
from u in users
join mm in mms on u.UserId equals mm.UserId
join ot in ots on mm.OrderId equals ot.OrderId
where mm.MonthNo == (
from mm1 in mms
where mm1.UserId == u.UserId
select mm1.MonthNo
).Max()
select new {u, mm, ot};
答案 1 :(得分:0)
就个人而言,我会用SQL编写查询,并会解决类似这样的问题:
SELECT user.userid
, user.name
, october_orders.orderquantity
, november_orders.orderquantity
, Coalesce(october_orders.orderquantity, november_orders.orderquantity)
FROM user
LEFT
JOIN monthsmap
ON monthsmap.userid = user.userid
LEFT
JOIN ordertable As october_orders
ON october_orders.orderid = monthsmap.orderid
AND monthsmap.month = 'october'
LEFT
JOIN ordertable As november_orders
ON november_orders.orderid = monthsmap.orderid
AND monthsmap.month = 'november'
玩游戏,看看你是怎么过的。
答案 2 :(得分:0)
试试这个sql
select ot.*
from OrderTable ot, MonthsMap mm
where ot.orderid = mm.orderid
and mm.userid = :userid
and mm.month = case
when (select count(*)
from MonthsMap mm1
where mm1.userid = mm.userid
and mm1.month = 'november') > 0 then
'november'
else
'october'
end;