来自Software Engineering Stack Exchange的
This question was migrated,因为可以在Stack Overflow上进行回答。
Migrated 5年前。
我拼命试图了解linq,现在我有一个具体的例子说明了我想做什么(失败):
我以为我不需要循环就可以完成上述操作,但是当重写上面的内容以使其工作时,它可能只会遇到第一个问题?
我要执行的问题是:
对于
这是在
首先,使用基本的Linq查询来获取所有字典条目:
这将返回一个
如前所述,您只希望
但这适用于集合中的所有项目。我们现在可以添加过滤器。
现在我们得到字典中任何
正如其他答案中突出显示的那样,
或者(如果我们使用的是System.Collections.Generic),则可以在一行中执行以下操作:
Migrated 5年前。
我拼命试图了解linq,现在我有一个具体的例子说明了我想做什么(失败):
Console.WriteLine("{0}", (from myaddresses[x].PostalNr where x => myaddresses[x].SortType == "110" ))
myaddress
是OneAddress
对象(我自己的对象)的字典,并且该对象包含属性SortType
和PostalNr
。我以为我不需要循环就可以完成上述操作,但是当重写上面的内容以使其工作时,它可能只会遇到第一个问题?
我要执行的问题是:
对于
SortType
设置为110的词典中的每个条目,请打印出其邮政编码。 最佳答案
以下是此方法的分步演练。
要设置样本数据(根据您的问题),我们具有OneAddress
类:
class OneAddress
{
public string PostalNr { get; set; }
public string SortType { get; set; }
}
这是在
Dictionary
中,因此我们有:var myAddresses = new Dictionary<int, OneAddress>();
myAddresses.Add(1, new OneAddress() { PostalNr = "123", SortType = "101" });
myAddresses.Add(2, new OneAddress() { PostalNr = "124", SortType = "110" });
myAddresses.Add(3, new OneAddress() { PostalNr = "125", SortType = "101" });
myAddresses.Add(4, new OneAddress() { PostalNr = "126", SortType = "110" });
myAddresses.Add(5, new OneAddress() { PostalNr = "127", SortType = "110" });
首先,使用基本的Linq查询来获取所有字典条目:
var results = from a in myAddresses
select a;
这将返回一个
IEnumerable<T>
,其中T
是KeyValuePair<int, OneAddress>
(与我们的字典相同)。如前所述,您只希望
PostalNr
而不是KeyValuePair
,因此我们将查询更改为:var results = from a in myAddresses
select a.Value.PostalNr;
Value
包含OneAddress
对象,并且我们仅获得所需的属性(在IEnumerable<T>
中)。但这适用于集合中的所有项目。我们现在可以添加过滤器。
var results = from a in myAddresses
where a.Value.SortType == "110"
select a.Value.PostalNr;
现在我们得到字典中任何
PostalNr
的OneAddress
,其中SortType
是"110"
,仅将结果打印到控制台屏幕上。正如其他答案中突出显示的那样,
Console.WriteLine()
不适用于可枚举的字符串列表,因此我们可以使用以下方式枚举项目:foreach (string postalNr in results)
{
Console.WriteLine(postalNr);
}
或者(如果我们使用的是System.Collections.Generic),则可以在一行中执行以下操作:
results.ToList().ForEach(p => Console.WriteLine(p));
10-07 16:03