c# - 多个 Where Linq 查询

标签 c# linq

我正在使用 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?

好吧,您在问题中的任何地方都没有提到这一点。但是,您可以使用以下查询来创建一个字典,其中 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());

关于c# - 多个 Where Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47632794/

相关文章:

c# - 检索所有可用打印机驱动程序的列表(如添加打印机向导)

c# - 多个 FileSystemWatcher 来监视本地系统上的文件?

c# - 用 linq 替换两个 foreach 循环

c# - 使用扩展方法重写以下 LINQ 语句的优雅方法是什么?

C# foreach 在一个接口(interface)的集合上

c# - 通过不显眼的验证正则表达式识别有效的 youtube url 在 MVC 3 中不起作用

c# - 将文本附加到富文本框的最快方法?

C# MySQL 在将数据插入我的表时遇到 fatal error

C# Mongo - Linq 按枚举过滤 -> 转换异常

c# - 我怎样才能在linq中直接执行SQL查询