Linq to SQL尝试使用DefaultIfEmpty()进行左连接,导致查询运算符'DefaultIfEmpty'使用不支持的重载。错误

时间:2011-12-13 12:11:43

标签: c# linq-to-sql left-join

这是我第一次尝试通过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请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

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

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

1 个答案:

答案 0 :(得分:0)

使用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();