解决 如何合并2个清单

Raysefo

知名会员
已加入
2019年2月22日
留言内容
194
编程经验
10+
你好,


我正在使用EF6。我正在查询一个表,如下所示:

C#:
//Query GameBank database
                var gameBankProductListResult = await _unitOfWork.GameBankRepository.GetGameBankProducts(
                    x => x.used == 0,
                    g => new {g.productCode, g.productDescription, g.unitPrice}, gcs => new
                    {
                        ProductID = gcs.Key.productCode,
                        ProductName = gcs.Key.productDescription,
                        Price = gcs.Key.unitPrice,
                        StockQuantity = gcs.Sum(g => g.quantity),
                        IsStockAvailable = gcs.Sum(g => g.quantity) > 0
                    });

并从Web API获得响应,如下所示:
C#:
response = await Utilities.CallRazer(products, "Product/");

                var htmlResponse = await response.Content.ReadAsStringAsync();
                var model = JsonConvert.DeserializeObject<ProductResponseDto>(htmlResponse);

                var productsListRazer = model.Products.Select(gcs =>
                        new
                        {
                            gcs.ProductID,
                            gcs.ProductName,
                            gcs.Price,
                            gcs.StockQuantity,
                            gcs.IsStockAvailable
                        })
                    .ToList();

我想知道是否有办法合并2个列表?我试过了,但是它说方法IEnum concat的类型参数不能从用法中推断出来。尝试显式指定类型参数。
C#:
var merged = productsListRazer.Concat(productsListRazer)
                    .GroupBy(g => new {g.ProductID, g.ProductName, g.Price, g.IsStockAvailable})
                    .Select(gcs => new
                    {
                        gcs.First().ProductID,
                        gcs.Key.ProductName,
                        gcs.Key.Price,
                        StockQuantity = gcs.Sum(g => g.StockQuantity),
                        gcs.Key.IsStockAvailable
                    })
                    .ToList();
 

Raysefo

知名会员
已加入
2019年2月22日
留言内容
194
编程经验
10+
我认为此查询需要可枚举;

C#:
/Query GameBank database
                var gameBankProductListResult = await _unitOfWork.GameBankRepository.GetGameBankProducts(
                    x => x.used == 0, g => new {g.productCode, g.productDescription, g.unitPrice},
                    gcs => new
                    {
                        ProductID = gcs.Key.productCode,
                        ProductName = gcs.Key.productDescription,
                        Price = gcs.Key.unitPrice,
                        StockQuantity = gcs.Sum(g => g.quantity),
                        IsStockAvailable = gcs.Sum(g => g.quantity) > 0
                    });




...



public virtual async Task<List<T>> GetGameBankProducts<T, TType>(Expression<Func<TEntity, bool>> where,
            Expression<Func<TEntity, TType>> groupBy, Expression<Func<IGrouping<TType, TEntity>, T>> select)
        {
            return await dbSet.Where(where)
                .GroupBy(groupBy)
                .Select(select)
                .ToListAsync();
        }
 

Raysefo

知名会员
已加入
2019年2月22日
留言内容
194
编程经验
10+
为两个查询返回Product对象解决了我的问题。

C#:
var gameBankProductListResult = await _unitOfWork.GameBankRepository.GetGameBankProducts(
                    x => x.used == 0, g => new {g.productCode, g.productDescription, g.unitPrice},
                    gcs => new Product
                    {
                        ProductID = gcs.Key.productCode,
                        ProductName = gcs.Key.productDescription,
                        Price = gcs.Key.unitPrice,
                        StockQuantity = gcs.Sum(g => g.quantity),
                        IsStockAvailable = gcs.Sum(g => g.quantity) > 0
                    });
 
最佳 底部