如何通过特定属性的最小值获得一组关系?

时间:2019-07-09 10:11:12

标签: c# entity-framework linq asp.net-core

问题很简单。我有一个Model1与Model2的关系-它们之间的关系是由一个递增的位置值排序的。

例如,如果我有类似的东西

Model1ToModel2{Model1Id = 1, Model2Id=1 , Position = 1}
Model1ToModel2{Model1Id = 1, Model2Id=2 ,Position = 2}
Model1ToModel2{Model1Id = 2, Model2Id=1 ,Position = 1}
Model1ToModel2{Model1Id = 2, Model2Id=2 ,Position = 2}

如何将其转换为类似的内容?

Model1ToModel2{Model1Id = 1, Model2Id=1, Position = 1}
Model1ToModel2{Model1Id = 2, Model2Id=1, Position = 1}

注意:位置1并不总是开始,可以删除与位置1的关系,从而导致位置2首次出现。

谢谢:)

编辑:到目前为止,我已经列出了所有关系-但是我无法解决如何分离Model1组以及将它们分离到关系最小的问题。

2 个答案:

答案 0 :(得分:0)

找到了解决方案

首先,我这样做: GroupBy(modelRelation => modelRelation.Model1Id)

然后我这样:

var newList = new List<T>();
foreach(var group in relations)
{
     var minElement = group.OrderBy(e => e.Position).ToList().FirstOrDefault();
     newList.Add(minElement);
}

答案 1 :(得分:0)

relations.GroupBy(r=>r.Model1Id) // This will group your relations by Model1Id
         //If I understood correctly, you want to keep only the ones with the smallest position
         .Select(group=>group.First(r=>r.Postion == group.Min(item=>item.Position));

我没有进行测试,但是只要我正确理解了您想要什么,它应该可以工作。