2009-02-09 8 views
14

मैं LINQ में उप-चयन कैसे लिखूं।लिंक उप-चयन

यदि मेरे पास ग्राहकों की एक सूची है और ऑर्डर की एक सूची है तो मैं उन सभी ग्राहकों को चाहता हूं जिनके पास कोई ऑर्डर नहीं है।

यह मेरा छद्म कोड का प्रयास है:

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

उत्तर

22

बनाओ कैसे के बारे में: उपयोग करने के लिए

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 का उपयोग कर रहे है, btw ? विभिन्न स्वादों में

+0

पठनीयता के मामले में गणना() के बजाय किसी भी() का उपयोग नहीं कर रहा है? बिल वैगनर के अधिक प्रभावी सी # पढ़ रहा था और यह सिफारिशों में से एक था। –

+2

हां, काफी संभवतः। ऐसा करने के कई तरीके। तर्कसंगत रूप से यह एक अच्छा() या कोई नहीं() एक्सटेंशन विधि होना अच्छा होगा जो कि किसी भी() के विपरीत है ... –

+0

हाँ, अच्छा विचार। –

7

इस डेटाबेस समर्थित है, तो नेविगेशन गुण (यदि आप उन्हें परिभाषित किया गया है) का उपयोग कर प्रयास करें:

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

नॉर्थविंड पर, यह उत्पन्न करता है टीएसक्यूएल:

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] 
    )) 

नौकरी काफी अच्छी तरह से करती है।

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

या छोड़कर()

-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(); 
+1

स्पष्टीकरण जोड़ें –