我正在使用linq c#来获取用户OrderId
由于用户可以有多个OrderId
,我需要获取每个id的服务。
为此,我使用foreach
循环并从数据库中获取ServiceId
。这需要很长时间才能检查每个OrderId
,而ServiceId
可以采用列表形式。
是否有任何方法只通过调用一次数据来获得结果?
此外,OrderId
必须是可区分的,例如每个id上有多少服务。
代码
foreach (var ord in orderInfoDetailList)
{
// this taking very long time if there are too many orderids
long orderid = ord.orderObj.OrderID;
var services = (from i in db.OrderServiceTBs
where i.OrderID == orderid
select i.ServiceID).ToList();
}
答案 0 :(得分:3)
如果您想要所有服务ID,您应该使用此加入方法(否foreach
):
var allServiceIDs = from o in orderInfoDetailList
join i in db.OrderServiceTBs
on o.orderObj.OrderID equals i.OrderID
select i.ServiceID;
var list = allServiceIDs.ToList(); // if you get duplicates use Distinct() before ToList()
但是我如何区分哪个orderid因为哪个服务 这给出了清单?
嗯,你在问题中没有提到这一点。但是,您可以使用以下查询来创建字典,其中OrderId
是Key
而Value
都是ServiceID
:
var orderGroups = from o in orderInfoDetailList
join i in db.OrderServiceTBs
on o.orderObj.OrderID equals i.OrderID
group i by o.OrderID into orderGroup
select orderGroup;
var orderLookup = orderGroups.ToDictionary(g => g.Key, g => g.Select(x => x.ServiceID).ToList());
答案 1 :(得分:1)
就像您正在尝试查找任何orderInfoDetailList值中存在的所有下拉列表ID实例。如果是这样,请尝试以下
var services = db.OrderServiceTBs.Where(i=>orderInfoDetailList.Any(x=>x.orderObj.OrderID == i.OrderID)).Select(x=> x.ServiceID).ToList();