我正在使用 linq c# 获取用户选择的服务 ID 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();
}
最佳答案
如果您想要所有服务 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()
But how will I distinguish which service on which orderid because this gives list?
好吧,您在问题中的任何地方都没有提到这一点。但是,您可以使用以下查询来创建一个字典,其中 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());
关于c# - 多个 Where Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47632794/