Entityset在早期阶段转向IEnumerable

本文关键字:段转 IEnumerable Entityset | 更新日期: 2023-09-27 18:01:36

我有以下问题:我想在一个简洁的概述中显示来自帮助台系统的ticket。我还想显示数据的摘要,比如按优先级和类别分组。最重要的是,相同的数据必须转换为。pdf文档。

我分几个步骤检索数据。第一步是原始数据,它是.pdf、摘要和实际概述的基础。这样,我就能确保它们获取相同的数据。在创建.pdf后,我直接从数据中读取。摘要是通过将数据平摊而得出的。概览是通过从数据中取出包含25条记录的页面并将字段放在网格中创建的。

问题是

IQueryable<RelationHoursTicketItem> HoursByTicket = 
            from Ticket t in allTickets
            let hours = t.Bezoekrapport.Urens.
                Where(h =>
                    (dateFrom == null || h.Datum >= dateFrom)
                    && (dateTo == null || h.Datum <= dateTo)
                    && h.Uren1 > 0)
            select new RelationHoursTicketItem
             {
                 Date = t.DatumCreatie,
                 DateSolved = new DateTime(2012, 11, 11),
                 Ticket = t,
                 Relatie = t.Relatie,
                 TicketNr = t.Id,
                 TicketName = t.Titel,
                 TicketCategorie = t.TicketCategorie,
                 TicketPriority = t.TicketPrioriteit,
                 TicketRemark = t.TicketOpmerkings.SingleOrDefault(tr => tr.IsOplossing)
             };

问题在TicketRemark。一旦执行数据,就会得到数十个子查询,因为依次检索了TicketOpmerkings(荷兰语中的TicketRemarks) 。最初的意图是创建一个IQueryable,它将作为所有其他查询的基础。为了实现这一点,我花了很多时间,创建了自定义表达式来计算我从这个例子中删除的某些字段。

最好的方法是什么?为t.TicketOpmerkingen这样的链接写表达式?它将删除LINQ的一些最好的功能。到目前为止,我看到的解决方案包括手动创建表达式,但我也可以放弃这种方法,并针对其特定目的进行几个查询。然后我放弃了LINQ和IQueryable整洁的"分层"方法。

有人有这方面的经验吗?

Entityset在早期阶段转向IEnumerable

您所遇到的情况被称为n+1问题。当您使用ORM检索实体时,使用延迟/延迟加载功能。

检索链接到其他实体的实体。当您尝试导航到第二组实体时,ORM/框架当前还没有加载实体。因此,它为您查询实体,允许您按照预期进行导航。

有几种方法可以解决这个问题。以下是一些关于数据加载选项的文章:

如果你正在使用Linq to Sql:

MSDN for DataLoadOptions

一篇解释DataLoadOptions用法的小文章

For Entity Framework:

MSDN for ObjectQuery(Of T).Include

一篇描述动态加载技术的文章

希望对你有帮助。