2012-08-23 2 views
4

Я новичок в Linq и было интересно, как я бы идти о получении списка Id клиента, и подсчет их сделокLINQ присоединиться и рассчитывать

public class Transaction 
{ 
    public int TransactionId {get; set;} 
    public int CustomerId {get; set;} 
} 


public class Customer 
{ 
    public int ID {get; set;} 
    public string Name {get; set;} 
    public string Surname {get; set;} 
} 

Я думаю, что нужно присоединиться к клиентам с транзакциями но не слишком уверен, как я получу счет.

var query = (from c in customers 
        join t in transactions on c.ID equals t.CustomerId 

ответ

3
var query = transactions 
       .GroupBy(t => t.CustomerId) 
        .Select (t => new { Id = t.Key, TranCount = t.Count() }) 
         .ToList(); 

Нет необходимости присоединиться к вам всю информацию об объекте сделки.

Вы, однако, должны были бы присоединиться, если вы хотите дополнительную информацию о клиентах, таких как фамилия клиента, в этом случае вы можете сделать следующее;

var query = (from c in customers 
       join t in transactions on c.ID equals t.CustomerId 
       group c by c.ID into grp 
       select new 
       { 
        Id = grp.Key, 
        Surname = grp.First().Surname, 
        TranCount = grp.Count() 
       }).ToList(); 
+0

Ваш ответ предполагает, что всегда есть по крайней мере одна сделка на одного клиента. См. Мой ответ для подхода, который не делает этого предположения. –

1

Ответ saj будет работать только в том случае, если у каждого клиента есть транзакция. Вместо этого, было бы лучше использовать группу присоединиться начиная с Customer и подсчитывать результат:

var query = from customer in customers 
      join transaction in transactions 
       on customer.Id equals transaction.CustomerId 
       into customerTransactions 
      select new { customer.Id, Count = customerTransactions.Count() }; 
Смежные вопросы