加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从列表中选择值

发布时间:2020-12-15 06:27:26 所属栏目:百科 来源:网络整理
导读:我有以下列表: public class Products{ public string SKU; public int WarehouseID;}ListProducts products = new ListProducts(); 在填写列表之后,我得到以下数据: ProductCode|WarehouseIDSKU001|2SKU001|3SKU002|3SKU003|3SKU004|1SKU004|5 我有多个SK
我有以下列表:
public class Products
{
 public string SKU;
 public int WarehouseID;
}

List<Products> products = new List<Products>();

在填写列表之后,我得到以下数据:

ProductCode|WarehouseID
SKU001|2
SKU001|3
SKU002|3
SKU003|3
SKU004|1
SKU004|5

我有多个SKU的项目可以从多个仓库位置提供,因为它有库存.在SKU001的情况下,仓库ID 2的库存比仓库ID 3多.

我需要从最少数量的仓库位置选择项目.我想要结束的就是这样

SKU001|3
SKU002|3
SKU003|3
SKU004|1

这将产品选择限制为只有2个位置,如SKU001,SKU002& SKU003都可以从仓库ID 3获得.理想地从库存最多但限制位置的位置选择更重要.

我正在使用Linq尝试实现这一点,同时尝试循环每个List项目,但是正在努力,因为Linq对我来说不是一个强项.我试图首先得到重复仓库ID使用的最高数量

products.GroupBy(i => i).OrderByDescending(grp => grp.Count()).Select(grp => grp.Key).FirstOrDefault();

但是其余的项目却迷失了.有什么想法,我可以如何解决这个问题?

解决方法

您可以在多个语句中执行此操作,首先在每个仓库中获取WarehouseID以及不同的产品,其数量如下所示:
var query = products.GroupBy(r => r.WarehouseID)
                    .Select(grp => new
                    {

                        WarehouseID = grp.Key,DistinctProducts = grp.Select(r => r.SKU).Distinct(),DistinctCount = grp.Select(r => r.SKU).Distinct().Count(),});

稍后创建一个结果列表,如:

List<Products> result = new List<Products>();

foreach (var item in query.OrderByDescending(r => r.DistinctCount)) //warehouse with most products
{
    if (!result.Any(r => item.DistinctProducts.Any(t => t == r.SKU)))
    {
        result.AddRange(item.DistinctProducts.Select(r => new Products { SKU = r,WarehouseID = item.WarehouseID }));
    }
}

输出:

foreach (var item in result)
{
    Console.WriteLine("{0} | {1}",item.SKU,item.WarehouseID);
}

输出:

SKU001 | 3
SKU002 | 3
SKU003 | 3
SKU004 | 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读