2015-12-08 3 views
0

Скажем, у меня есть usertable и ordertable.Linq Entity Framework выбирает отдельные столбцы заполнителя

Критерии для usertable таковы, что я получу одного и того же пользователя более одного раза.

Как сделать distinct и sum() в Linq?

В SQL это:

SELECT DISTINCT 
    u.Name, u.Phone, SUM(o.Amount) 
FROM 
    User u 
JOIN 
    Order o ON u.UserId = o.UserId 
WHERE 
    u.Type = 1 OR u.External = 1 
GROUP BY 
    Name, Phone 

ответ

1

Вы можете использовать GroupJoin создать запрос, который суммирует количество заказа для каждого пользователя:

var query = users 
    .Where(user => user.Type == 1 && user.External == 1) 
    .GroupJoin(
    orders, 
    user => user.Id, 
    order => order.UserId, 
    (user, ordersForUser) => new { 
     user.Name, 
     user.Phone, 
     Amount = ordersForUser.Sum(order => order.Amount) 
    } 
); 

Предлагаемых группы запросов по имени пользователя и телефона. Эти группы запросов по идентификатору пользователя, которые я предполагаю, являются тем, что вы действительно хотите. Будет разница, если два разных пользователя имеют одинаковое имя и телефон.

+0

Спасибо! Это отлично работает для моего вопроса выше. Проблема в том, что я немного упростил свою проблему ... Отношение не является прямым родителем/дочерним элементом. Реальные таблицы следующим образом: Пользователь <- UserInvoice -> Продукция Где «UserInvoice» многие-ко-многим между Пользователем и продуктов мне нужно отчетливое пользователя, с суммой от UserInvoice и сумму от продукта, с фильтром на UserInvoice и на пользователе. –

0

Для примера. Попробуйте свои критерии. В примере Count будет давать сумму столбца с разным.

from l in logins 
    group l by l.Date into g 
    select new 
{ 
    Date = g.Key, 
    Count = (from l in g select l.Login).Distinct().Count() 
}; 
Смежные вопросы