c# - DefaultIfEmpty() 不起作用

标签 c# linq

您好,我正在尝试在 IQueryable 上使用 DefaultIfEmpty() 函数,它会抛出异常“不支持用于查询运算符‘DefaultIfEmpty’的重载。” 这是我的代码:

 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 的不同方法,但我仍然想知道如何解决这个问题...这是异常的第一部分:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NotSupportedException: Unsupported overload used for query operator 'DefaultIfEmpty'.

最佳答案

这对我来说似乎是不言自明的:

Unsupported overload used for query operator 'DefaultIfEmpty'

听起来您的 LINQ 提供程序(您未指定)不支持采用默认值的 DefaultIfEmpty 的重载。

最简单的替代方法可能是使用:

var ret = db.Dinners.Where(d => d.DinnerID == id)
                    .FirstOrDefault();
return ret ?? db.Dinners.Where(d => d.DinnerID == 5).Single();

请注意,除非需要,否则这种方法会避免获取“默认”晚餐,因此效率也更高。

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

关于c# - DefaultIfEmpty() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7084183/

相关文章:

c# - Xamarin Forms Rg.Plugins.Popup

c# - 如何在没有引用的情况下克隆通用 List<T>?

c# - 如何找到字符串中所有可能的子串?

.net - Entity Framework 中的可空实体投影

c# linq 按日期时间分组到最接近的秒

c# - LINQ - 根据条件过滤重复项

c# - 存储在 Session 中的变量在整个页面生命周期中是否被反序列化一次或多次?

c# - 如何在 web api 中显示文件中的所有日志

javascript - 如何在 C# Xamarin for WebView 中实例化 JavaScript 对象

c# - LINQ 提示子查询返回多于 1 行