如何在LINQ中编写子选择。

如果我有一个客户列表和一个订单列表,我希望所有没有订单的客户。

这是我的伪代码尝试:

    var  res = from c in customers 
where c.CustomerID ! in (from o in orders select o.CustomerID) 
select c

#1楼 票数:24 已采纳

怎么样:

var res = from c in customers 
          where !orders.Select(o => o.CustomerID).Contains(c.CustomerID)
          select c;

另一种选择是使用:

var res = from c in customers
          join o in orders 
               on c.CustomerID equals o.customerID 
               into customerOrders
          where customerOrders.Count() == 0
          select c;

您使用LINQ to SQL还是别的什么,顺便问一下? 不同的口味可能有不同的“最佳”方式

#2楼 票数:7

如果这是由数据库支持的,请尝试使用导航属性(如果已定义它们):

var res = from c in customers
          where !c.Orders.Any()
          select c;

在Northwind上,这会生成TSQL:

SELECT /* columns snipped */
FROM [dbo].[Customers] AS [t0]
WHERE NOT (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [dbo].[Orders] AS [t1]
    WHERE [t1].[CustomerID] = [t0].[CustomerID]
    ))

这项工作做得很好。

#3楼 票数:-1

            var result = (from planinfo in db.mst_pointplan_info
                                                           join entityType in db.mst_entity_type
                                                           on planinfo.entityId equals entityType.id
                                                           where planinfo.entityId == entityId
                                                           && planinfo.is_deleted != true
                                                           && planinfo.system_id == systemId
                                                           && entityType.enity_enum_id == entityId
                                                           group planinfo by planinfo.package_id into gplan
                                                           select new PackagePointRangeConfigurationResult
                                                           {
                                                               Result = (from planinfo in gplan
                                                                         select new PackagePointRangeResult
                                                                         {
                                                                             PackageId = planinfo.package_id,
                                                                             PointPlanInfo = (from pointPlanInfo in gplan
                                                                                              select new PointPlanInfo
                                                                                              {
                                                                                                  StartRange = planinfo.start_range,
                                                                                                  EndRange = planinfo.end_range,
                                                                                                  IsDiscountAndChargeInPer = planinfo.is_discount_and_charge_in_per,
                                                                                                  Discount = planinfo.discount,
                                                                                                  ServiceCharge = planinfo.servicecharge,
                                                                                                  AtonMerchantShare = planinfo.aton_merchant_share,
                                                                                                  CommunityShare = planinfo.community_share
                                                                                              }).ToList()
                                                                         }).ToList()
                                                           }).FirstOrDefault();

#4楼 票数:-2

var  res = (from c in orders where c.CustomerID == null
               select c.Customers).ToList();

或者除了()

  ask by Dan translate from so

未解决问题?本站智能推荐:

3回复

C#外部应用于LINQ

如何在LINQ中实现外部应用? 我有一点问题。 这是我正在使用的SQL查询。
5回复

C#Linq对重复值的完全外连接

我有两个具有这种类型的IQueryable集合 集合1,具有以下名称值: 集合2,具有以下名称值: 我想得到的是第三个集合,其中集合1和2的名称值匹配,如果没有匹配,则为null (empty) ,如下所示: 如何用C#,LINQ实现这一目标?
2回复

将SQL查询(具有外部联接和datediff)转换为LINQ

我有此SQL查询需要转换为LINQ。我是LINQ的新手,而外部联接使我很难将此查询转换为LINQ。 有人可以帮忙吗? 我失败的尝试看起来像这样:
16回复

LINQ-全外连接

我有一个人的 ID 和他们的名字的列表,以及一个人的 ID 和他们的姓氏的列表。 有些人没有名字,有些人没有姓氏; 我想对两个列表进行完整的外部联接。 因此,以下列表: 应该产生: 我是 LINQ 的新手(所以请原谅我的跛脚)并且已经找到了很多“LINQ 外连接”的解决方案,它们看起来都非常相似,但
4回复

linq中的左外连接

我有以下查询,但我不知道如何在表1上进行左外连接。
1回复

如何在Linq查询语法中进行双左外连接(或流畅)

Linq pad中的上述内容给出了以下结果集 请注意,使用的数据库具有ClaimId(int)和IsPolicyHolder(bool)的主键,并且存在一个约束,即IsPolicyHolder或IsInsured字段中的任何一个必须为True。 我真正想要的是IsPolicyHolde
1回复

LINQ:具有多个条件的左外连接

我有两个IEnumerables,分别称为BaseReportDefinitions和InputReportDefinitions。 我需要做一个左外部连接,在这里我想要所有的InputReportDefinitions和匹配的BaseReportDefinitions。 这两个IEnumb
2回复

在Linq中使用左外部联接

我想用左外部联接编写一个LINQ查询,为此我可以编写相应的SQL查询,该查询返回所需的输出,但是linq中的相同查询不适用于我。 这是我的SQL的样子: 该查询为我返回了7条记录,这就是我的要求。现在我想使用LINQ编写相同的查询,这是我尝试过的操作: 但是我一直在面对这个问题。在这