如何解决LINQ Distinct通过选择要保留的对象
如果我有对象列表,并且我不想允许对象的某些属性重复。我的理解是,我可以使用DistinctBy()删除其中一个对象。我的问题是如何选择保留哪些属性值相同的对象?
示例: 我将如何删除列表tm中所有具有“ year”重复值的对象,并保持具有“ someValue”最大值的对象?
class TestModel{
public int year{ get; set; }
public int someValue { get; set; }
}
List<TestModel> tm = new List<TestModel>();
//populate list
//I was thinking something like this
tm.DistinctBy(x => x.year).Select(x => max(X=>someValue))
谢谢!
解决方法
您可以使用GroupBy
和Aggregate
(LINQ中没有IHttpClientFactory
内置方法)
.AddHttpClient()
,
使用GroupBy
/ SelectMany
模式和Take(1)
后跟OrderBy
的用户:
IEnumerable<TestModel> result =
tm
.GroupBy(x => x.year)
.SelectMany(xs =>
xs
.OrderByDescending(x => x.someValue)
.Take(1));
这是一个例子:
List<TestModel> tm = new List<TestModel>()
{
new TestModel() { year = 2020,someValue = 5 },new TestModel() { year = 2020,someValue = 15 },new TestModel() { year = 2019,someValue = 6 },};
那给了我
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。