Это моя команда sql:

select 
    b.Brand, 
    count(b.Brand) as BrandCount,
    SUM(a.Qty) as DeviceCount 
from (
    select * from DeviceList
) as a 
join DeviceMaster as b 
    on a.DeviceMasterId = b.Id
group by b.Brand 

Вот что я пробовал до сих пор:

var v1 = (from p in ghostEntities.DeviceMasters 
          join c in ghostEntities.DeviceLists on p.Id equals c.DeviceMasterId 
          select new table_Model { 
            Id = c.Id, 
            qty = c.Qty.Value, 
            month = c.DMonth, 
            brand = p.Brand, 
            model = p.Model, 
            memory = p.Memory
          }).ToList();

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

-2
aakash kumar 5 Май 2016 в 07:28

2 ответа

Лучший ответ

После группировки по таблице вы теряете доступ к полям другой таблицы в операции объединения, возможный обходной путь:

var results = (from a in DeviceList
                join b in DeviceMaster
                on a.DeviceMasterId equals b.Id
                group new { a, b } by new { b.Brand } into grp
                select new
                {
                    Brand = grp.Key.Brand,
                    BrandCount = grp.Count(),
                    DeviceCount = grp.Sum(x=> x.a.Qty.GetValueOrDefault())
                }).ToList();
1
Zein Makki 5 Май 2016 в 06:09

Вы должны добавить group by в свой запрос LINQ и использовать функции агрегирования Distinct (). Count () и Sum ():

var query = from a in ghostEntities.DeviceList
   join b in ghostEntities.DeviceMaster on a.DeviceMasterId equals b.Id
   group b by b.Brand into g
   select new { g.Key, count =g.Select(x => x.Brand).Distinct().Count(), sum = g.Sum(x => x.Qty) };

Вы можете найти множество примеров LINQ на странице https://code.msdn.microsoft. com / 101-LINQ-Samples-3fb9811b, надеюсь, вам это поможет.

2
Alex Vazhev 5 Май 2016 в 04:44