C# 在.Where()中使用.SingleOrDefault()将引发以下异常:-System.NotSupportedException未经用户代码处理

C# 在.Where()中使用.SingleOrDefault()将引发以下异常:-System.NotSupportedException未经用户代码处理,c#,asp.net,asp.net-mvc,entity-framework,entity-framework-5,C#,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework 5,我正在开发一个asp.net mvc-4 web应用程序,我正在使用Entity Framework 5。现在我有了以下模型方法:- public IQueryable<TMSStorageDevice> CustomerSD(int customerid) { var customerSiteIds = entities.SiteDefinitions.Where(a => a.AccountDefinitions1.Single

我正在开发一个asp.net mvc-4 web应用程序,我正在使用Entity Framework 5。现在我有了以下模型方法:-

 public IQueryable<TMSStorageDevice> CustomerSD(int customerid)
        {


            var customerSiteIds = entities.SiteDefinitions.Where(a => a.AccountDefinitions1.SingleOrDefault().ORG_ID == customerid).Select(a2 => a2.SITEID).ToList();
        }
我可以通过替换(
SingleOrDefault()
)来修复此问题:-

使用(
FirstOrDefault()
):-


那么,有人能对这种行为提出建议吗?我的意思是,为什么在这种情况下,
FirstOrDefault()
会起作用,而不像
SingleorDefault()

,因为
SingleorDefault
需要它生成SQL,以确保外部行不超过1行。本质上,如果计数>1,它必须创建一个不返回任何行的联接

然而,
FirstOrDefault
只允许它生成一个联接并选择Top1(或等效项),这要容易得多


它只是没有在EF中实现。

您确定不能以其他方式实现吗?您可能正在查找任何()
entities.SiteDefinitions.Where(a=>a.AccountDefinitions1.Any(a=>a.ORG\u ID==customerid))
可能的重复项,所以像我现在这样使用firstOrdefalt是否正确?现在我将始终有一个AccountDefinitions1对象,尽管我有一个集合,因为这是我正在处理的thid party系统,,,
System.NotSupportedException was unhandled by user code
  HResult=-2146233067
  Message=The methods 'Single' and 'SingleOrDefault' can only be used as a final query operation. Consider using the method 'FirstOrDefault' in this instance instead.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SingleTranslatorBase.TranslateUnary(ExpressionConverter parent, DbExpression operand, MethodCallExpression call)
       at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       at System.Data.Objects.ELinq.ExpressionConver
a.AccountDefinitions1.SingleOrDefault().ORG_ID
a.AccountDefinitions1.FirsteOrDefault().ORG_ID