我有以下测试代码,我只想选择国家名称,例如:
var countries = new[]
{
new { Name = "Frankrijk", Oppervlake = 643274 },
new { Name = "Nederland", Oppervlake = 41528},
new { Name = "Belgium", Oppervlake = 25812}
};
Console.WriteLine("selected name");
output = countries.Where(x => x.Oppervlake > 100).Select(x => x.Name);
然后我得到错误:
无法将System.Collections.Generic.IEnumerable<string>
类型隐式转换为System.Linq.IOrderedEnumerable<AnonymousType#1>
有人可以告诉我为什么吗? Linq应该可以在任何集合中使用,是吗?
谢谢大家,问题确实在于输出的类型。我之前已经为它分配了另一种类型,代码是:
var output = countries.OrderBy(x => x.Name);
我现在知道编译器会给出 var 变量初始值的类型。 这就是我得到这个错误的原因。再次感谢大家:)
@Jon Skeet:感谢您的评论,我仍然不太熟悉如何在这里发帖,但我后来会更加关注:)
答案 0 :(得分:2)
看起来output
不是存储linq查询结果的正确类型。
尝试为此创建一个新变量。
var moarOutput = countries.Where(x => x.Oppervlake > 100).Select(x => x.Name);
答案 1 :(得分:2)
我几乎肯定输出被声明为错误的类型。以下代码顺利执行:
static void Main(string[] args)
{
IEnumerable<string> output;
var countries = new[]
{
new { Name = "Frankrijk", Oppervlake = 643274 },
new { Name = "Nederland", Oppervlake = 41528},
new { Name = "Belgium", Oppervlake = 25812}
};
Console.WriteLine("selected name");
output = countries.Where(x => x.Oppervlake > 100).Select(x => x.Name);
foreach (var v in output)
Console.WriteLine(v);
Console.ReadLine();
}
答案 2 :(得分:1)
我猜你在另一个语句中使用了输出变量,比如
var output = countries.OrderBy(...)
然后,输出类型为System.Linq.IOrderedEnumerable<AnonymousType#1>
该行
countries.Where(x => x.Oppervlake > 100).Select(x => x.Name);
将生成System.Collections.Generic.IEnumerable<string>
您无法将其分配给输出,因为它具有不同的类型。