c# - 在 C# 中使用 LINQ Distinct

标签 c# linq

我在 LINQ 中使用 distinct 时遇到问题。我有这个列表:

LineIdChanged   LineId  OldGatewayPCId  NewGatewayPCId  LineStringID    PlantID
1               93      83              88              160             2
2               93      83              88              161             2
3               94      82              87              162             2
4               94      82              87              163             2

我尝试的是获得一个不同的 LineId 值,因此在这种情况下我应该只获得两个对象而不是所有四个对象。我试过这个:

  var s = (from n in _dataBaseProvider.SelectPjdGatewayLineChanged(selectedSourcePlant.LPS_Database_ID)
          select new PjdGatewayLineChanged() { LineId = n.LineId, LpsLineNo = n.LpsLineNo, LineIdChanged = n.LineIdChanged}).Distinct();

  LinesOld = s.ToList();

但这给了我所有 4 个对象。

最佳答案

您需要使用 MoreLINQ's DistinctBy:

var s = 
    (from n in _dataBaseProvider.SelectPjdGatewayLineChanged
    (selectedSourcePlant.LPS_Database_ID)
    select new PjdGatewayLineChanged
    { 
        LineId = n.LineId,
        LpsLineNo = n.LpsLineNo, 
        LineIdChanged = n.LineIdChanged
    })
    .DistinctBy(p => p.LineId);

关于c# - 在 C# 中使用 LINQ Distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18057310/

相关文章:

c# - 关闭和清理 Socket 连接的正确方法是什么?

c# - Entity Framework 6 迁移与 MVC 6 RC 1

c# - 使用 LINQ 选择枚举中所有标记的值

c# - 在 foreach/for 中构建 where 子句的延迟查询

c# - 有没有更有效的方法将 LINQ 结果转换为 string[] 或 List<string>?

c# - 这是如何运作的? LINQ to Entities 触发程序集加载?

C# .NET 图表 - 添加图例滚动条和复选框

C# 字符串等于不能正常工作

c# - 异步写入重定向的标准输出是同步的还是异步的?

c# - 无法将类型 'System.Linq.IQueryable' 隐式转换为 'System.Collections.Generic.IList'