DefaultIfEmpty()不起作用

Ell*_*hen 8 c# linq

嗨,我正在尝试使用DefaultIfEmpty()函数IQueryable,它抛出异常"不支持的重载用于查询运算符'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;
Run Code Online (Sandbox Code Playgroud)

我发现了一种不同的方法,DefaultIfEmpty但我仍然想知道如何解决这个问题......这是例外的第一部分:

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

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

Jon*_*eet 14

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

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

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

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

var ret = db.Dinners.Where(d => d.DinnerID == id)
                    .FirstOrDefault();
return ret ?? db.Dinners.Where(d => d.DinnerID == 5).Single();
Run Code Online (Sandbox Code Playgroud)

请注意,除非需要,否则此方法可以避免获取"默认"晚餐,因此它也更有效.

(如果任何ID只应该有一个结果,那么你应该使用SingleOrDefault而不是FirstOrDefault顺便说一句.这样做更符合逻辑.)