C# Entityset在早期阶段就变成了IEnumerable
我有以下问题:我想在一个整洁的概览中显示来自帮助台系统的票据。我还想显示数据的摘要,比如按优先级和类别进行分组。除此之外,必须将相同的数据转换为.pdf文档 我分几个步骤检索数据。第一步是原始数据,它是.pdf、摘要和实际概述的基础。这样,我确保他们使用相同的数据。创建.pdf后,我直接从数据中读取。这些总结是通过将数据展平而得出的。通过从数据中提取一页25条记录并将字段放入网格中,可以创建概览 问题是C# Entityset在早期阶段就变成了IEnumerable,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我有以下问题:我想在一个整洁的概览中显示来自帮助台系统的票据。我还想显示数据的摘要,比如按优先级和类别进行分组。除此之外,必须将相同的数据转换为.pdf文档 我分几个步骤检索数据。第一步是原始数据,它是.pdf、摘要和实际概述的基础。这样,我确保他们使用相同的数据。创建.pdf后,我直接从数据中读取。这些总结是通过将数据展平而得出的。通过从数据中提取一页25条记录并将字段放入网格中,可以创建概览 问题是 IQueryable<RelationHoursTicketItem> Hour
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)
};
IQueryable HoursByTicket=
从票t到所有票
让小时=t.Bezoekrapport.Urens。
其中(h=>
(dateFrom==null | | h.基准>=dateFrom)
&&(dateTo==null | | h.基准0)
选择new RelationHours TicketItem
{
日期=t.datumcreate,
DateSolved=新的日期时间(2012,11,11),
票=t,
Relatie=t.Relatie,
TicketNr=t.Id,
TicketName=t.滴度,
TicketCategorie=t.TicketCategorie,
TicketPriority=t.ticketprioritiit,
TicketRemark=t.TicketOpmerkings.SingleOrDefault(tr=>tr.isoclossing)
};
问题出在TicketRemark中。我一执行数据,就会得到几十个子查询,因为TicketOpmerkings(Dutch表示TicketRemark)被一个接一个地检索。最初的意图是创建一个IQueryable,它将作为所有其他查询的基础。为了实现这一点,我花了很多时间,创建了自定义表达式s来计算我从这个例子中截取的某些字段
最好的方法是什么?为所有这些链接(如t.TicketOpmerkingen)编写表达式?这将删除LINQ的一些最佳功能。到目前为止,我看到的解决方案包括手动创建表达式,但我也可以放弃这种方法,并进行多个查询,每个查询都有特定的用途。然后我放弃LINQ和IQueryable的简洁“分层”方法
任何人对此有经验吗?您所经历的被称为。它发生在您使用ORM和功能检索实体时 您检索链接到其他实体的实体。当您尝试导航到第二组实体时,ORM/Framework当前尚未加载该实体。因此,它会为您查询该实体,允许您按预期导航 有几种方法可以解决此问题。以下是一些有关数据加载选项的文章: 如果您正在使用Linq to Sql: 对于实体框架:
希望对您有所帮助。我已经用LoadWith解决了这个问题,我只需在设置:options.LoadWith(t=>t.TicketOpmerkings)后检索所需的票证即可;我后来遇到了另一个问题:我不能在sql上使用order by,但我可以在以后对可枚举项进行排序。非常好。在L2S中使用加载选项有一些缺点-首先,在对上下文运行查询之前,您只能为上下文设置加载选项-这可能会导致问题,但希望不会对您造成问题。编码快乐=)我很快就发现了,我只是为票据创建了一个单独的datacontext。这意味着我在以后编辑/更新时遇到了麻烦,但目前我所需要的只是检索大量连接的数据。以前的查询会话可能需要几分钟!为什么不能使用“按顺序”呢?会发生什么?我以前没有碰到过那个问题。也许开始一个新问题的新问题?是的,我做同样的事情,在一个单独的背景。这不是一种理想的做法,但通常我会尝试确保只返回/公开不是从上下文派生的实体。我正在积极地寻找解决办法,如果我找到了,我会在这里给你写封信。