这是我第一次尝试通过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'的不支持的重载。
我的代码中是否有任何明显的错误,或者我是否需要完全尝试不同的方法。任何帮助非常感谢。
答案 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();