首先关于Enum throw"序列不包含任何元素"

时间:2016-04-04 12:17:01

标签: c# dynamic ienumerable

我有后续代码:

=A2*constant 

我得到例外"序列不包含任何元素"在IF声明中的第一行。

myList是一个if ( myList.Where ( .. condition .. ).Where ( .. another condition .. ).Any() ) { var element = myList.Where ( .. condition .. ).Where ( .. another condition .. ).First().Elements ; ..some logic over element .. } ,其中MyObject继承了ExpandoObject的形式,并有一个名为Elements的getter,它将对象转换为动态。

按要求编辑我试图获得有关任何和第一个执行的查询的更多细节。

List<MyObject>

3 个答案:

答案 0 :(得分:2)

问题是在调用where之前,没有任何内容符合您的First()条件。鉴于您没有显示实际代码,很难判断条件是否相同,但最好的方法是重写它:

var thing = myList.Where ( .. condition .. ).Where ( .. another condition .. ).FirstOrDefault();

if (thing != null)
{
    var element = thing.Element;
    ..some logic over element ..
}

这样做的好处是不会重复where条件两次并保存输入源的双枚举,这取决于myList实际上可能会遭受性能损失。

答案 1 :(得分:0)

尝试这样的事情:

var myValue = myList.Where(..condition..).Where(..another condition..).FirstOrDefault();
if ( myValue != null )
{
     var element = myValue.Elements ;
     ..some logic over element ..
}

您使用的事实是,如果没有结果,您将获得null,并检查null而不是执行两次查询。此外,如果您需要更改查询,您只有一个地方可以更改它。

我认为您的错误是由.Any().First()

中前面的谓词略有不同引起的

答案 2 :(得分:0)

您必须使用FirstOrDefault()

var element= myList.FirstOrDefault(x => condition1 && condition2 && ...);

if(element!= null)
{
    // Apply logic over the element
}