[C#] LINQ - बाएं शामिल हों, समूह द्वारा, और गणना करें


Answers

एक सबक्वायरी का उपयोग करने पर विचार करें:

from p in context.ParentTable 
let cCount =
(
  from c in context.ChildTable
  where p.ParentId == c.ChildParentId
  select c
).Count()
select new { ParentId = p.Key, Count = cCount } ;

यदि क्वेरी प्रकार किसी एसोसिएशन से जुड़े होते हैं, तो यह सरल होता है:

from p in context.ParentTable 
let cCount = p.Children.Count()
select new { ParentId = p.Key, Count = cCount } ;
Question

मान लें कि मेरे पास यह एसक्यूएल है:

SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
  LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId

मैं LINQ से SQL में इसका अनुवाद कैसे कर सकता हूं? मैं COUNT (c.ChildId) पर फंस गया, जेनरेटेड एसक्यूएल हमेशा COUNT (*) आउटपुट प्रतीत होता है। यहां तक ​​कि मुझे अब तक क्या मिला है:

from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
from j2 in j1.DefaultIfEmpty()
group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count() }

धन्यवाद!




 (from p in context.ParentTable     
  join c in context.ChildTable 
    on p.ParentId equals c.ChildParentId into j1 
  from j2 in j1.DefaultIfEmpty() 
     select new { 
          ParentId = p.ParentId,
         ChildId = j2==null? 0 : 1 
      })
   .GroupBy(o=>o.ParentId) 
   .Select(o=>new { ParentId = o.key, Count = o.Sum(p=>p.ChildId) })



Links