IQ的扩展方法不工作
本文关键字:工作 方法 扩展 IQ | 更新日期: 2023-09-27 18:33:17
>我写了一个扩展方法:
public static IQueryable<TSource> ConditionalDefaultEmpty<TSource>(this IQueryable<TSource> source, bool condition)
{
return condition ? source.DefaultIfEmpty() : source ;
}
然后我调用了该方法,如下所示:
var q = from sr in myDb.tblStudentsRegInfos
from de in myDb.tblDisciplinesEvents.Where(e => sr.Serial == e.tblStudentsRegInfoRef
&& e.tblStudentsRegInfoRef == studentRegId
&& (!forStudent || e.PublishOnInternet)
&& (!formDate.HasValue || e.RegDate >= formDate)
&& (!toDate.HasValue || e.RegDate <= toDate))
.ConditionalDefaultEmpty(noPrintAll)
join dt in myDb.tblDisciplinesTitles on de.tblDisciplinesTitlesRef equals dt.Serial
where sr.Serial == studentRegId
group sr by new
{
...
}
into std
select new
{....
};
但是我收到此错误:
会员访问[列名]不合法....
如何解决此问题?
更新:我了解EF无法编译为IQueryable...
您只是无法添加自定义扩展方法并希望实体框架能够将其转换为SQL,尽管这很酷,至少对于此类情况而言。
也就是说,您可以将IQueryable
变成IEnumerable
:
.AsEnumerable()
.ConditionalDefaultEmpty(noPrintAll)