[英]DistinctBy With Condition in LINQ
I am having entity collection from Database which contains certain duplicates like One sequence with values and other sequence with empty values.我有来自数据库的实体集合,其中包含某些重复项,例如带有值的一个序列和带有空值的其他序列。 I would like to remove sequence with empty one.
我想用空的序列删除序列。 I have tired
moreLINQ
for DistinctBy
but still my case is not satisfying.我已经厌倦了
DistinctBy
moreLINQ
,但我的情况仍然不令人满意。
I have a following list from result set.我从结果集中有以下列表。
Result: Id=1, Name="Test1", Status="New", Values=NULL
Result: Id=1, Name="Test1", Status="Assigned", Values=123
Result: Id=2, Name="Test2", Status="New", Values=NULL
Result: Id=2, Name="Test2", Status="Assigned", Values=698
Result: Id=3, Name="Test3", Status="Assigned", Values=569
Result: Id=4, Name="Test4", Status="New", Values=NULL
Result: Id=5, Name="Test5", Status="Assigned", Values=156
I would like to retrieve follwoing outputs always by skipping duplicate with empty values or New
status.我想始终通过跳过具有空值或
New
状态的重复项来检索以下输出。
Result: Id=1, Name="Test1", Status="Assigned", Values=123
Result: Id=2, Name="Test2", Status="Assigned", Values=698
Result: Id=3, Name="Test3", Status="Assigned", Values=569
Result: Id=4, Name="Test4", Status="New", Values=NULL
Result: Id=5, Name="Test5", Status="Assigned", Values=156
You can so something like below你可以像下面这样
DOTNETFIDDLE working code DOTNETFIDDLE工作代码
var modified = listOfValues
.GroupBy(x => x.Id)
.Select(x => x.OrderByDescending(x => x.Values ?? int.MinValue).FirstOrDefault());
Results:结果:
Group by Id
and take the first record of each group that is ordered by Status
:按
Id
分组并获取按Status
排序的每个组的第一条记录:
var records = new[]
{
(Id:1, Name:"Test1", Status:"New", Values:default(int?)),
(Id:1, Name:"Test1", Status:"Assigned", Values:123),
(Id:2, Name:"Test2", Status:"New", Values:default(int?)),
(Id:2, Name:"Test2", Status:"Assigned", Values:698),
(Id:3, Name:"Test3", Status:"Assigned", Values:569),
(Id:4, Name:"Test4", Status:"New", Values:default(int?)),
(Id:5, Name:"Test5", Status:"Assigned", Values:156),
};
var result = records
.GroupBy(r => r.Id)
.Select(r => r.OrderBy(x => x.Status).First());
Result:结果:
Id Name Status Values
------------------------------
1 Test1 Assigned 123
2 Test2 Assigned 698
3 Test3 Assigned 569
4 Test4 New null
5 Test5 Assigned 156
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.