繁体   English   中英

使用linq从列表中获得不同的值

[英]Distinct values from a list using linq

我有一个对象列表,根据这些对象,我需要另一个不同值的列表。

用一个例子来解释我的问题

原始清单

// Class of the object
class Obj
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Address { get; set; }
}

// List of the object
List<Obj> objects = new List<Obj>();

//Values in the list
Obj a = new Obj();
a.Name = "Jack";
a.Surname = "Grey";
a.Address = "Sheffield";
objects.Add(a);

Obj b = new Obj();
b.Name = "John";
b.Surname = "Grey";
b.Address = "Sheffield";
objects.Add(b);

Obj c = new Obj();
c.Name = "Jack";
c.Surname = "Grey";
c.Address = "London";
objects.Add(c);

现在我想要另一个列表,该列表根据数组具有不同的值

string[] ColArray = new string[2] {"Name", "Surname"};

我该怎么做? 基本上有另一个列表,数组中的列不同

List<Obj> NewList = objects.GroupBy( what to put here ).Select(x => x.First()).ToList();

我的NewList将包含a和b的对象

您可以使用System.Linq.Dynamic如下实现:

  1. 获取Nuget软件包

以下是代码(在LinqPad上,否则将Dump调用替换为Console.WriteLine ):

string[] ColArray = new string[] {"Name","Surname"};

string groupingString = "new(" + string.Join(",",ColArray) + ")";

var groupedObjectData = objects.GroupBy(groupingString,"it");

foreach (IGrouping<DynamicClass, Obj> objGroup in groupedObjectData)
{
    objGroup.Select(x => x).Dump();
}

重要事项:

  1. 可以将ColArray修改为具有1列或多于1列,它将自动调整
  2. 默认情况下,分组键是DynamicClass ,分组值是obj class类型
  3. 分组语句中的“ it”是Dynamic Linq关键字,用于选择所有列,而不是特定列

结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM