簡體   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