无法将类型System.Collections.Generic.Ienumerable <string>隐式转换为system.Linq.IOrderedEnumerable <anonymoustype#1> </anonymoustype#1> </string>

时间:2014-07-31 15:22:13

标签: c# .net linq generics

我有以下测试代码,我只想选择国家名称,例如:

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:感谢您的评论,我仍然不太熟悉如何在这里发帖,但我后来会更加关注:)

3 个答案:

答案 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>

您无法将其分配给输出,因为它具有不同的类型。

相关问题