У меня есть эти данные, которые нужно сгруппировать, но если 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