我有一個List<T>
包含一些用戶定義的類數據。LINQ使用C#問題
我想查找2個數據字段組合的唯一實例。例如,如果條目包含字段「名稱」和「年齡」,則需要名稱和年齡組合的唯一情況,例如,達倫32,只能被檢索一次,即使它在列表中多次。
這可以通過LINQ來實現嗎?
謝謝。
我有一個List<T>
包含一些用戶定義的類數據。LINQ使用C#問題
我想查找2個數據字段組合的唯一實例。例如,如果條目包含字段「名稱」和「年齡」,則需要名稱和年齡組合的唯一情況,例如,達倫32,只能被檢索一次,即使它在列表中多次。
這可以通過LINQ來實現嗎?
謝謝。
你只需要提取這些數據字段,並使其獨特:
var result = list
.Select(x => new { Age = a.Age, Name = x.Name})
.Distinct();
這將創建包含年齡和名字屬性匿名類型的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
}
}
看一看的Distinct
擴展方法
你必須寫自己的equality comparer,並使用Linq的Distinct功能。
myList.Select(l => new { l.Name, l.Age })
.Distinct()
.ToDictionary(x => x.Name, x => x.Age)
簡單:
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>>
在這種情況下):
var lookup =
uniqueNameAges
.ToLookup(x => x.Name, x => x.Age);
如果你有人Ë命名爲「約翰」具有鮮明的時代,那麼你可以像這樣訪問他們:
IEnumerable<int> ages = lookup["John"];
非常感謝,但我怎麼然後存儲兩個值,比如在一本字典?我收到一個錯誤,說不能轉換?再次感謝。 – 2011-02-04 10:58:45
使用ToDictionary方法,在這個問題的更多信息,看看第一個答案:http://stackoverflow.com/questions/627867/linq-query-to-return-a-dictionarystring-string – 2011-02-04 11:06:47