使用.Any时,为什么会出现“Sequence contains no matching element”错误

问题描述 投票:0回答:2

我有一个.Any()Linq方法:

db.MyTable.Any(x => x.Year == MyObj.Year && x.Quarter == MyObj.Quarter && x.Week == MyObj.Week)

那是返回错误:

 System.InvalidOperationException occurred
  HResult=0x80131509
  Message=Sequence contains no matching element
  Source=EntityFramework

但是,MSDN文档声明.Any方法返回“如果源序列包含任何元素,则为true;否则为false”。

为什么这个方法抛出异常而不是返回False?

c# sql linq
2个回答
0
投票

使用这个小代码很难看出原因是什么。它肯定不在代码的这一部分。

尝试进行一些调试,使用调试器检查所有值,或者在执行函数之前编写一些Debugging语句:

// Check myObj
MyObjectType myObj = ...         // instead of var, so you are certain you have the right type
Debug.Assert(myObj != null);

// only if Year, Quarter, Week are classes:
Debug.Assert(myObj.Year != null);   
Debug.Assert(myObj.Quarter != null);
Debug.Assert(myObj.Week != null);

// check your db:
Debug.Assert(db != null);
Debug.Assert(db.MyTable != null);
int count1 = db.MyTable.Count();
int count2 = db.MyTable
    .Where(x => x.Year == MyObj.Year 
        && x.Quarter == MyObj.Quarter
        && x.Week == MyObj.Week)
    .Count();
bool hasAny = db.MyTable
    .Where(x => x.Year == MyObj.Year 
        && x.Quarter == MyObj.Quarter
        && x.Week == MyObj.Week)
    .Any();

// if all this works, your statement should also work
hasAny = db.MyTable
    .Any(x => x.Year == MyObj.Year 
        && x.Quarter == MyObj.Quarter
        && x.Week == MyObj.Week);

-1
投票

很难看到,用你的例子,但可能你必须检查你的“MyTable”中是否有Null值,MyTable.Year,MyTable.Quarter和MyTable.Week的数据类型与MyObj中的相同数据类型相匹配...

© www.soinside.com 2019 - 2024. All rights reserved.