多个Linq查询

时间:2017-12-04 11:54:12

标签: c# linq

我正在使用linq c#来获取用户OrderId

选择的服务ID

由于用户可以有多个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();
}

2 个答案:

答案 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因为哪个服务   这给出了清单?

嗯,你在问题中没有提到这一点。但是,您可以使用以下查询来创建字典,其中OrderIdKeyValue都是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();