linq选择后匿名类型被破坏

时间:2016-05-31 14:48:07

标签: c# linq anonymous-types

我有一个匿名类型的奇怪问题。让我们直接进入我的代码:

var anon = new[] 
{
    new { Var1 = 20, Var2 = 40, Var3 = 70 },
    new { Var1 = 25, Var2 = 45, Var3 = 75 }
};

// found should be of type { int Var1, int Var2, int Var3 }
var found = anon.Select(x => x).Where(x => x.Var1 == 25);

var test = found.Var1 // <-- not defined error here

非常简单的问题:
为什么我在使用linq select后无法访问Var1

对于这个主题感到抱歉,想不出更好的描述。

3 个答案:

答案 0 :(得分:5)

因为Where会返回IEnumerable<>,而不是单个元素。 您可以使用FirstFirstOrDefault来获取第一个元素。

found.First().Var1

答案 1 :(得分:2)

Where返回IEnumerable,用于0-n结果。

如果您总是有1个结果,则需要Single

如果您有0-1的结果,则需要SingleOrDefault

如果您有1-n个结果,则需要First

如果您有0-n结果,则需要FirstOrDefault

答案 2 :(得分:1)

我在这台机器上没有C#编译器,但可能是因为找到了anonymus类型的Iterable。尝试使用anon.Select(x => x).Where(x => x.Var1 == 25).First()anon.Select(x => x).Where(x => x.Var1 == 25).FirstOrDefault()。此外,我很确定你不需要选择,你可以使用anon.Where(x => x.Var1 == 25).First()