【问题标题】:Extract list values on a particular Properties, Linq提取特定属性的列表值,Linq
【发布时间】:2013-11-14 15:26:06
【问题描述】:

我们可以使用以下代码从列表中提取不同的值集

List<Person> distinctPeople = allPeople
  .GroupBy(p => new {p.PersonId, p.FavoriteColor} )
  .Select(g => g.First())
  .ToList();

假设人有 PersonId、FavoriteColor、年龄、地址等......我的要求是我想获得一个单独的列表,其中应该只包含不同的过滤器数据,例如 PersonId、FavoriteColor 而不是其他。那命令是什么,假设我可以创建一个包含 PersonId、FavoriteColor only 的小类

【问题讨论】:

    标签: c# linq


    【解决方案1】:
      List<Person> distinctPeople = allPeople
      .GroupBy(p => new {p.PersonId, p.FavoriteColor} )
      .Select(g => new {g.First().PersonId, g.First().FavouriteColor})
      .ToList();
    

    更新

    如果你有自己的类说yourClass 和属性PersonalIdFavouriteColor,只需将选择部分更改为

    .Select(g => new YourClass{PersonalId = g.First().PersonId, FavouriteColor = g.First().FavouriteColor})
    

    【讨论】:

    • 好吧,假设我有一个只包含 PersonId、FavoriteColor 的小子类,我如何将输出转换为那个
    • 是的。只需将选择部分更改为.Select(g =&gt; new YourClass{PersonalId = g.First().PersonId, FavouriteColor = g.First().FavouriteColor})
    【解决方案2】:

    你可以像这样在一个新类中选择你想要的:

     .Select(g =>  new {g.PersonId, g.FavoriteColor})
    

    对象将仅包含您选择的内容,在本例中为 PersonIdFavoriteColor

    【讨论】:

      【解决方案3】:

      您可以使用 Distinct 扩展名和自定义 IEqualityComparer,类似

      List<Person> distinctPeople = allPeople
          .Distinct(new CustomEqualityComparer())
          .Select(p=> new{ p.PersonId, p.FavoriteColor})
          .ToList();
      

      【讨论】:

        猜你喜欢
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 2016-01-15
        • 1970-01-01
        • 2012-07-19
        相关资源
        最近更新 更多