扩展方法对于IQueryable不起作用

时间:2014-12-06 11:21:03

标签: c# linq entity-framework iqueryable

我写了一个扩展方法:

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 ......

1 个答案:

答案 0 :(得分:-1)

您只是无法添加自定义扩展方法,并希望Entity框架能够将其转换为SQL,尽管这对于像这样的情况至少是非常酷的。

也就是说,您可以将IQueryable变为IEnumerable

.AsEnumerable()
.ConditionalDefaultEmpty(noPrintAll)