gpt4 book ai didi

entity-framework - 如何计算关联实体而不在 Entity Framework 中获取它们

转载 作者:行者123 更新时间:2023-12-03 06:52:24 25 4
gpt4 key购买 nike

我想知道这个问题已经有一段时间了,所以我认为值得使用我的第一篇 Stack Overflow 帖子来询问它。

假设我与关联的消息列表进行讨论:

DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);

discussionCategory.Discussions 是当前未加载的讨论实体的列表。

我想要的是能够迭代discussionCategory中的讨论,并说出每个讨论中有多少条消息,而无需获取消息数据。

当我之前尝试过此操作时,我必须加载讨论和消息,以便我可以执行以下操作:

discussionCategory.Discussions.Attach(Model.Discussions.CreateSourceQuery().Include("Messages").AsEnumerable());

foreach(Discussion discussion in discussionCategory.Discussions)
{

int messageCount = discussion.Messages.Count;

Console.WriteLine(messageCount);

}

这对我来说似乎相当低效,因为我从数据库中获取可能数百个消息体并将它们保存在内存中,而我只想统计它们的数量以用于演示目的。

我看到了一些涉及这个主题的问题,但他们似乎没有直接解决这个问题。

预先感谢您对此主题的任何想法。

更新 - 根据要求添加更多代码:

public ActionResult Details(int id)
{
Project project = _repository.GetProject(id);
return View(project);
}

然后在 View 中(只是为了测试一下):

Model.Discussions.Load();
var items = from d in Model.Discussions select new { Id = d.Id, Name = d.Name, MessageCount = d.Messages.Count() };

foreach (var item in items) {
//etc

我希望这能让我的问题更清楚一些。如果您需要更多代码详细信息,请告诉我。

最佳答案

简单;只需投影到 POCO(或匿名)类型即可:

var q = from d in Model.Discussions
select new DiscussionPresentation
{
Subject = d.Subject,
MessageCount = d.Messages.Count(),
};

当您查看生成的 SQL 时,您会发现 Count() 是由数据库服务器完成的。

请注意,这适用于 EF 1 和 EF 4。

关于entity-framework - 如何计算关联实体而不在 Entity Framework 中获取它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2010897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com