我有后续代码:
=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>
答案 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
}