扫描对象列表并比较对象值

时间:2018-11-10 20:27:21

标签: c# list object

例如,我有3个列表(或更多):

列表1:

  

[{商店:“商店1”,项目:“项目1”,价格:10},{商店:“商店1”,项目:“项目2”,价格:5},{商店:“商店1”,项目:“ item4“,价格:100},{商店:” store1“,项目:” item10“,价格:10}]

列表2:

  

[{store:“ store2”,item:“ item1”,价格:15},{store:“ store2”,item:“ item2”,价格:10},{store:“ store2”,item:“ item10“,价格:110}]

列表3:

  

[{store:“ store3”,item:“ item1”,价格:5},{store:“ store3”,item:“ item2”,价格:10},{store:“ store3”,item:“ item10“,price:100},{store:” store3“,item:” item100“,price:1}]

您可以看到这就像3家商店,它们的商品和价格不同。并非所有商店都有所有商品,因此我想通过比较列表并查找包含“ item1”的对象来创建一个列表,然后选择更便宜的价格。并且还要将列表一一比较(列表1与列表2,列表1与列表3,列表2与1以及列表2与3)。我有道理吗?

任何答案都值得赞赏。

我已经尝试了一些方法,但我还是听不懂(及其2家商店):

var result = (from l1 in store1list join l2 in store2list on l1.Symbol equals l2.Symbol orderby l1.Symbol select new
        {

                          store = l1.store,
                          price = l1.price,
                          item = l1.item

        }).ToList();

1 个答案:

答案 0 :(得分:2)

您可以先合并列表,然后再组合GroupBy项目,然后选择按价格对每个组进行排序并从每个组中获取第一个(最便宜的)。

var result = List1.Concat(List2).Concat(List3).GroupBy(x => x.item)
     .Select(g => g.OrderBy(x=> x.price).First()).ToList();