あなたは基本的に顧客テーブルと顧客注文テーブルの間でLEFT JOINを実行し、その結果に基づいて各顧客の注文をカウントするグループを実行する必要があります。あなたはこのクラスは、左の各項目を格納することで、この
public class CustomerOrder
{
public int CustomerId { set; get; }
public int? OrderId { set; get; }
}
のようなクラスを持っていると仮定すると
が結果今
に参加するには、最初にLEFTを行う必要があり、結果を登録しようとプロジェクトCustomerOrder
クラスのオブジェクトのリストにそのことを、そして、その
var usersWithCount = (from c in db.Customers
join o in db.Orders on c.CustomerId equals o.CustomerId
into result
from sub in result.DefaultIfEmpty()
select new CustomerOrder{ OrderId= sub!=null ? sub.OrderId :(int?) null,
CustomerId = u.CustomerId }
) // Here we have the left join result.
.GroupBy(g => g.CustomerId , (k, orders) => new {
CustomerId = k,
OrderCount = orders.Count(t=>t.OrderId !=null)}).ToList();
結果STOの上にGROUPBYを行いますusersWithCount
の赤は、CustomerId
とOrderCount
という特性を持つ匿名オブジェクトのコレクションになります。
を返します。このような方法でstatemebtを選択してください。 select new {CustomerID = c.CustomerId、TotalOrders =(t == null?0:c.Orders.Count())}; –