EF Core Data Grouping и разбиение на страницы - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть эти данные, которые нужно сгруппировать, но если groupId равен 0, нам не нужно группировать их. Я буду рассматривать это как отдельные данные. Ниже приведены примеры данных

DECLARE @ProductTable TABLE
(
  ProductId INT,
  ProductName NVARCHAR(100),
  Price decimal(10,2),
  GroupId NVARCHAR(10)
)

INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (1, 'Item1', 100, '0')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (2, 'Item2', 100, '0')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (3, 'Item3', 100, '0')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (4, 'Item4', 100, 'G1')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (5, 'Item5', 100, 'G1')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (6, 'Item6', 100, 'G2')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (7, 'Item7', 100, 'G3')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (8, 'Item8', 100, 'G3')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (9, 'Item9', 100, 'G3')
INSERT INTO @ProductTable (ProductId, ProductName, Price, GroupId) VALUES (10, 'Item10', 100, 'G3')

Я могу добиться группировки, отделив ее, что-то вроде.

var singleProducts = _context.ProductTable.Where(p => p.GroupId = '0').ToList();
var groupedProducts = _context.ProductTable.Where(p => p.GroupId != '0').GroupBy(g => g.GroupId).ToList();

и присоединившись к ним.

var data = singleProducts.Select(s => new ResultData(){
    ProductId = s.ProductId,
    ProductName = s.ProductName,
    Count = s.Count(),
    Total = s.Sum(ss => ss.Price)
}).ToList();

var data2 = groupedProducts .Select(s => new ResultData(){
    ProductId = s.First().ProductId,
    ProductName = s.First().ProductName,
    Count = s.Count(),
    Total = s.Sum(ss => ss.Price)
}).ToList();

var mergeData = new List<ResultData>();
mergeData.AddRange(data);
mergeData.AddRange(data2);

Достижение этого результат

ProductId, ProductName, Count, Total
1           Item1        1       100
2           Item2        1       100
3           Item3        1       100
4           Item4        1       200
6           Item6        1       100
7           Item7        1       400

возможно ли достичь этого в 1 LINQ или лямбда-выражении? потому что эти данные должны быть разбиты на страницы. Я называю их по отдельности, как указано выше, у меня уходит около 20-30 секунд, потому что эти данные огромны, как 200k-300k

...