簡體   English   中英

LINQ使用C#問題

[英]LINQ using C# question

我有一個List<T> ,它包含一些用戶定義的類數據。

我想找到2個數據字段組合的唯一實例。

例如,如果條目包含字段名稱和年齡,我希望名稱和年齡組合的唯一案例,例如Darren 32,只應檢索一次,即使它在列表中多次。

這可以用LINQ實現嗎?

謝謝。

您只需要提取這些數據字段並使其唯一:

var result = list
  .Select(x => new { Age = a.Age, Name = x.Name})
  .Distinct();

這將創建一個包含Age和Name屬性的匿名類型的IEnumerable。

如果您需要查找唯一數據背后的項目,則需要GroupBy 這將為列表提供每組后面的單個項目。

var result = list
  .GroupBy(x => new { Age = a.Age, Name = x.Name});

foreach (var uniqueItem in result )
{
    var age = uniqueItem.Key.Age;
    var name = uniqueItem.Key.Name;
    foreach (var item in uniqueItem)
    {
       //item is a single item which is part of the group
    }
}
myList.Select(l => new { l.Name, l.Age })
      .Distinct()
      .ToDictionary(x => x.Name, x => x.Age)

你必須編寫自己的相等比較器 ,並使用Linq的Distinct函數。

看看Distinct擴展方法

簡單:

var people = new List<Person>();

// code to populate people

var uniqueNameAges =
    (from p in people
     select new { p.Name, p.Age }).Distinct();

然后到字典:

var dictionary =
    uniqueNameAges
    .ToDictionary(x => x.Name, x => x.Age);

或者查找(非常類似於Dictionary<string, IEnumerable<int>>在這種情況下為Dictionary<string, IEnumerable<int>> ):

var lookup =
    uniqueNameAges
    .ToLookup(x => x.Name, x => x.Age);

如果你有一個名為“John”的人有不同的年齡,那么你可以像這樣訪問它們:

IEnumerable<int> ages = lookup["John"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM