排除查询结果中的列

时间:2016-06-02 15:32:55

标签: c# entity-framework linq linq-to-entities

我有一个名为EmailLog的实体,其中包含数据库中的To,From,Subject,Body等条目。

我想在查询多行时排除Body的效率/性能。不确定如何实现这一目标。我尝试使用投影(见下文),但我收到运行时错误,说我无法投影到实体类型。

var results = Repository.Find<EmailLog>().Select(x => new EmailLog
            {
                Id = x.Id,
                Subject = x.Subject,
                Recipient = x.Recipient,
                Status = x.Status,
                FirstAttempted = x.FirstAttempted,
                LastAttempted = x.LastAttempted,
                Attempts = x.Attempts
            });

这是可以理解的。我可以创建一个没有Body的新类,并将其投射到该类上,但我对查询应用了一些分页,并且在我应用分页选项之前不想评估结果。我的分页功能如下所示:

public static PagedList<T> ApplyPagingAndSorting<T>(this IEnumerable<T> list, 
IPaginationOptions paginationOptions)

它接受一个可枚举的列表,并将Skip()和Take()应用于列表,然后枚举它。那么我怎样才能确保将IEnumerable列表传递给我尚未枚举的函数,但相关查询在最终枚举或评估时不选择Body?

1 个答案:

答案 0 :(得分:0)

正如我的评论中所提到的,调用def drawArrow(A, B, axis): axis.arrow(A[0], A[1], B[0] - A[0], B[1] - A[1], head_width=0.2, head_length=10) 将不会枚举您的结果,它是延迟执行的Linq方法之一。因此,如果您对没有Body的类进行投影,您仍然可以将生成的Select()传递给IEnumerable方法。