2009-07-31 101 views
3

我想將此T-SQL轉換爲Linq To SQL,但無法通過聚合函數計算出該組。任何幫助歡迎。Linq to SQL by Group by

select c.ClientID, GivenName, Surname, max(a.Address), max(t.Value) 
from Client c 
left join ClientAddress a on c.ClientID = a.ClientID 
left join ClientContact t on c.ClientID = t.ClientID 
group by c.ClientID, GivenName, Surname 

回答

3

要通過組組合鍵,您通常使用匿名類型:

var qry = from x in someSource 
       group x by new { x.ClientID, x.GivenName, x.Surname } into grp 
       select new { grp.Key, Address = grp.Max(x => x.Address), 
        Value = grp.Max(x => x.Value) }; 
0

我想出了確切的答案是

public IQueryable<ClientSearchDTO> GetClientsDTO() 
     { 
      return (from client in this.Context.Clients 
        join address in this.Context.ClientAddresses on client.ClientID equals address.ClientID 
        join contact in this.Context.ClientContacts on client.ClientID equals contact.ClientID     
        where contact.ContactType == "Phone" 
        group client by new { client.ClientID, client.Surname, client.GivenName } into clientGroup 
        select new ClientSearchDTO() 
        { 
         ClientID = clientGroup.Key.ClientID, 
         Surname = clientGroup.Key.Surname, 
         GivenName = clientGroup.Key.GivenName, 
         Address = clientGroup.Max(x => x.ClientAddresses.FirstOrDefault().Address), 
         PhoneNumber = clientGroup.Max(x => x.ClientContacts.FirstOrDefault().Value) 
        }); 
     }