LINQ Join и Sum Query возвращает дубликаты результатов - PullRequest
1 голос
/ 27 февраля 2020

Я выполняю этот запрос в LINQ, который объединяет таблицы и возвращает сумму продаж по идентификатору района.

var resultsalescity = (from so in _companysales
                    join en in _entity
                    on so.Id equals en.Id
                    group so by so.Id into totaledorders
                    from tot in totaledorders
                    join ad in _address
                    on tot.Id equals ad.EntityId
                    select new Salescities {
                        Totaledvalue = totaledorders.Sum(s = >s.TotalCost),
                        District = ad.DistrictId.ToString(),
                    }).ToList();

 return resultsalescity;

Я получаю возврат значений дубликатов:

[{"totaledvalue":3855.00,"district":"568"},{"totaledvalue":3855.00,"district":"568"}}
..... 

Как я могу удалить дубликаты на идентификаторе района, чтобы получить только одно значение для каждого района?

1 Ответ

1 голос
/ 27 февраля 2020

Я получаю 4 дубликата ID района в результатах с разными значениями продаж

Это правильно. Потому что он сгруппирован по идентификатору. Фактический результат 4 дубликатов ID района будет отличаться _companysales.Id. Так что вы можете искать что-то вроде этого

var groupedByIdAndDistrictData = (from so in _companysalesRepo.QueryNoTracking
                                    join en in _entityRepo.QueryNoTracking on so.PharmacyId equals en.Id
                                    join ad in _addressRepo.QueryNoTracking on so.PharmacyId equals ad.EntityId

                                    group so by new {
                                        so.Id,
                                        ad.DistrictId
                                    }
                                    into totaledeorders

                                    select new Salescities {
                                        Totaledvalue = totaledeorders.Sum(s = >s.TotalCost),
                                        District = totaledeorders.Key.DistrictId.ToString()
                                    }).ToList();

var resultsalescity = groupedByIdAndDistrictData.GroupBy(p = >p.District)
                                    .Select(g = >new Salescities {
                                        Totaledvalue = g.Sum(s = >s.Totaledvalue),
                                        District = g.Key
                                    }).ToList();

return resultsalescity;
...