[英]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.