[英]How do I put distinct values from a LINQ query into a list?
我已經看過類似問題的幾個答案,但是沒有一個能解決我的問題。 我需要做的就是從LINQ查詢(查詢XML文件)中獲得不同的值,並將它們放入列表中。 這是我嘗試過的:
var XmlData = XDocument.Load("PathToFile");
List<string> XmlItems = new List<string>();
var XQuery = from m in XmlData.Root.Elements()
where m.Attribute("Category").Value.ToString().Equals("TheCategory")
select (m.Attribute("TheAttribute").Value).Distinct().ToString();
XmlItems.AddRange(XQuery);
foreach (var item in XmlItems)
{
ComboBoxTeams.Items.Add(item);
}
Distinct()
函數調用未提供預期的結果。 我不熟悉如何從LINQ查詢中獲取不同的值。 有什么建議么?
在這一點上,您Distinct
var XQuery = from m in XmlData.Root.Elements()
where m.Attribute("Category").Value.ToString().Equals("TheCategory")
select (m.Attribute("TheAttribute").Value).Distinct().ToString();
僅適用於(m.Attribute("TheAttribute").Value)
,不適用於整個語句
您可能需要將其更改為
var XQuery = from m in XmlData.Root.Elements()
where m.Attribute("Category").Value.ToString().Equals("TheCategory")
select (m.Attribute("TheAttribute").Value.ToString()); //get everything first, ToString probably needed
var XQueryDistinct = XQuery.Distinct(); //get distinct among everything you got
您在錯誤的位置放置了.ToString()和.Distinct()。
var XmlData = XDocument.Load("PathToFile");
List<string> XmlItems = new List<string>();
var XQuery = from m in XmlData.Root.Elements()
where m.Attribute("Category").Value.ToString().Equals("TheCategory")
select (m.Attribute("TheAttribute").Value).Distinct().ToString();
XmlItems.AddRange(XQuery);
foreach (var item in XmlItems)
{
ComboBoxTeams.Items.Add(item);
}
變成:
var XmlData = XDocument.Load("PathToFile");
var XmlItems = (from m in XmlData.Root.Elements()
where m.Attribute("Category").Value.ToString().Equals("TheCategory")
select (m.Attribute("TheAttribute").Value.ToString())).Distinct();
foreach (var item in XmlItems)
{
ComboBoxTeams.Items.Add(item);
}
如果您有一個簡單值列表,則需要在選擇和放置之后刪除Distinct的使用。
var XQuery = (from m in XmlData.Root.Elements()
where m.Attribute("Category").Value.ToString().Equals("TheCategory")
select (m.Attribute("TheAttribute").Value.ToString())).Distinct();
如果您有復雜的對象,則有兩種選擇:
使用morelinq可以使用DistinctBy:
XmlItems.DistinctBy(x => x.WhateverProperty);
否則,您可以使用一個組:
XmlItems.GroupBy(x => x.idOrWhateverOtherProperty)
.Select(g => g.First());
你可以試試
var uniqueList = yourList.Distinct().ToList();
獲得非唯一列表后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.