Linq到SQL尝试左连接与DefaultIfEmpty()导致查询操作符'DefaultIfEmpty'

本文关键字:DefaultIfEmpty 查询 操作符 SQL 连接 Linq | 更新日期: 2023-09-27 18:17:35

这是我第一次尝试通过linq做一个左连接,我已经通过堆栈溢出和谷歌,但我所尝试的一切都没有工作(很可能通过我自己缺乏理解)。我正在尝试执行以下查询:

IQueryable<MyType> pQ = (from prd in dc.ProductDatas 
join cc in dc.CategoryProducts.DefaultIfEmpty(defaultCP) 
on prd.ProductID equals cc.ProductID 
where cc.CatID == CatID
orderby cc.OrdWithinInCategory 
select prd);

我已经将defaultCP定义为:

CategoryProduct defaultCP = new CategoryProduct {ID = 1,CatID = CatID, OrdWithinInCategory = 999};

我得到以下错误:

查询操作符'DefaultIfEmpty'不支持重载。

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

Exception Details: System。NotSupportedException:查询操作符'DefaultIfEmpty'不支持重载。

在我的代码中是否有任何明显的错误,或者我是否需要尝试完全不同的方法。如有任何帮助,不胜感激。

Linq到SQL尝试左连接与DefaultIfEmpty()导致查询操作符'DefaultIfEmpty'

使用AsEnumerable().

CategoryProduct defaultCP = new CategoryProduct {ID = 1,CatID = CatID, OrdWithinInCategory = 999};
IQueryable<MyType> pQ = (from prd in dc.ProductDatas 
                        join cc in dc.CategoryProducts.DefaultIfEmpty(defaultCP) 
                           on prd.ProductID equals cc.ProductID 
                        where cc.CatID == CatID
                        orderby cc.OrdWithinInCategory 
                        select prd)
               .AsEnumerable()
               .DefaultIfEmpty(defaultCP).First();