首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultIfEmpty()不工作

DefaultIfEmpty()不工作
EN

Stack Overflow用户
提问于 2011-08-16 19:55:05
回答 3查看 9.8K关注 0票数 9

嗨,我正试图在DefaultIfEmpty()上使用IQueryable函数,它抛出了一个异常“用于查询操作符‘DefaultIfEmpty’的不受支持的重载”。这是我的密码:

代码语言:javascript
复制
 Dinner defaultDinner = db.Dinners.Where(d => d.DinnerID == 5).Single();
 Dinner blah;
 IQueryable<Dinner> bla = db.Dinners.Where(d => d.DinnerID == id)
                            .DefaultIfEmpty(defaultDinner);
 blah = bla.First();
 return blah;

我在没有DefaultIfEmpty的情况下找到了一种不同的方法,但我仍然想知道如何解决这个问题.以下是例外的第一部分:

描述:一个未处理的异常发生在当前web请求的执行过程中。请查看堆栈跟踪以获得有关错误的更多信息,以及它起源于代码的位置。

异常详细信息: System.NotSupportedException:不支持的重载,用于查询操作符'DefaultIfEmpty'.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-16 19:59:18

在我看来这似乎是不言自明的:

不支持的重载用于查询运算符“DefaultIfEmpty”

听起来您的LINQ (您还没有指定)不支持DefaultIfEmpty的过载,这是一个默认值。

最简单的选择可能是使用:

代码语言:javascript
复制
var ret = db.Dinners.Where(d => d.DinnerID == id)
                    .FirstOrDefault();
return ret ?? db.Dinners.Where(d => d.DinnerID == 5).Single();

请注意,这种方法避免获取“默认”晚餐,除非它是必需的,因此它也更有效。

(如果任何ID只有一个结果,那么您可能应该使用SingleOrDefault而不是FirstOrDefault。这样更合乎逻辑。)

票数 14
EN

Stack Overflow用户

发布于 2011-08-16 19:57:09

试炼

代码语言:javascript
复制
Dinner dinner = db.Dinners.SingleOrDefault(d => d.DinnerID == id);
票数 2
EN

Stack Overflow用户

发布于 2011-08-16 20:04:36

DefaultIfEmpty方法在调用IQueryable<T>时抛出一个IQueryable<T>。您可以通过调用IEnumerable<T>来执行对db.Dinners.Where(d => d.DinnerId == id).ToEnumerable().First()的显式转换。

不过,您可能不应该使用这种方法。最好只检查调用是否返回任何值,如果不返回,则检索默认值。

编辑:Oop.不,乔恩·斯基特是对的。DefaultIfEmpty扩展方法依赖于查询提供程序的实现,因此它肯定取决于所使用的查询提供程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7084183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档