我有一些需要分组的数据,但是如果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或Lambda表达式中实现吗?因为此数据需要分页。 我像上面一样分别称呼它们,大约需要20-30秒才能完成,因为这些数据非常庞大,例如200k-300k