gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:21:29 25 4
gpt4 key购买 nike

我正在开发一个 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();
}

现在这将引发以下错误:-

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

我能够通过替换 (SingleOrDefault()) 来解决这个问题:-

a.AccountDefinitions1.SingleOrDefault().ORG_ID

与 (FirstOrDefault()):-

a.AccountDefinitions1.FirsteOrDefault().ORG_ID

所以任何人都可以对这种行为提出建议吗?我的意思是为什么 FirstOrDefault() 在这种情况下会与 SingleorDefault() 不同?

最佳答案

因为 SingleOrDefault 会要求它生成 SQL,以确保不超过 1 个外部行。本质上,如果计数 > 1

,它必须创建一个不返回任何行的连接但是,

FirstOrDefault 仅允许它生成连接和 SELECT TOP 1(或等效项),这要容易得多。

它只是没有在 EF 中实现。

关于c# - 在 .Where() 中使用 .SingleOrDefault() 将引发以下异常 :- System. NotSupportedException 未被用户代码处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com