【问题标题】:Linq to Entity - what's the best method of determining the number of entitysets from entityLinq to Entity - 从实体确定实体集数量的最佳方法是什么
【发布时间】:2011-12-16 06:36:48
【问题描述】:

我有一个与 bizlogic 分离的实体返回。

我现在想检查在多对多关系中有多少实体集。

目前我的代码如下所示:

context.Attach(entity);
entity.entityset.Load();
int count entity.entityset.count();

这个简单的示例还有更多内容,但现在我只想知道如何以最有效的方式提取实体集的数量。上面的例子给我的印象是我在确定记录数量之前加载了整个实体集记录列表,除非我误解了 Linq to Entity 的基本原理。 (我是新手,来自 Net Tiers)

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

    如果可以直接使用导航属性,那么Count()应该变成这个SQL:

    SELECT COUNT(*) AS [value]
    FROM [entityset] AS [t0]
    

    我不确定,但我也觉得Load() 会首先将整个集合加载到内存中。所以尽量不要这样做:)

    编辑:This question is similar,因为它们正在重新附加实体,然后尝试让导航属性正常工作。它可能适用。

    【讨论】:

    • 我试图不惜一切代价避免负载,但没有其他方法可以解决这个问题。抱歉,不确定导航属性是什么意思,是 entity.entityset(实体集是导航属性)吗?需要先加载它才能工作,否则总是零计数。 (Linq to Entities 还是新手)
    • @Rob:是的,这就是导航属性。你能用这种方式重写你的查询context.EntitySet.Where(es => es.EntityId == entity.Id).Count()吗?您也可以尝试将此问题的答案应用于您的问题:stackoverflow.com/questions/5472254/…
    • 不确定 5472254 是否有帮助,抱歉。我看不到 context.EntitySet?我只看到 context.Entity 和 context.Entity.EntitySet。
    • @Rob:我给你的查询不是来自那个链接,它是一个单独的选项。虽然这很奇怪 - 所有实体都应该直接从上下文中在集合中可见,除非您有一个“复杂类型”,它本身没有映射到模型中的实体,在这种情况下,您可以将其映射为实体。至于我链接的问题,我在想context.CreateObject<Entity>();,添加相应的关键属性,然后查询entity.EntitySet。或者干脆重新查询:context.Entities.Single(e => e.Id == entity.Id).EntitySet.Count().
    • 我使用了从数据库更新到edmx的默认方法!?!? :)(仍在学习)我明白你在说什么,听起来不错。稍后将尝试此操作并通知您。没有想到“context.Entities.Single(e => e.Id == entity.Id).EntitySet.Count()”。我需要了解“context.CreateObject();”在将此应用于我的代码之前。感谢您的帮助。
    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多