访问集合中的第一个元素

时间:2012-05-29 21:12:19

标签: c#

如果我发送具有Photos集合的名为Property的对象,当我只需要像这样的Photos集合中的第一个元素时,这种方法是否加载了集合中的所有元素而不是assoc。只是我想要的第一个,或者这个方法是我需要的,首先从收集中加载。

public PropertyHPViewModel(Property x)
{
    Id = x.Id;
    Created = x.Created;
    Title = x.Title;
    Photo = x.Photos.First();
}

从探查器生成的SQL

SELECT photos0_.PropertyId    as PropertyId1_,
       photos0_.Id            as Id1_,
       photos0_.Id            as Id1_0_,
       photos0_.ImageData     as ImageData1_0_,
       photos0_.ImageMimeType as ImageMim3_1_0_,
       photos0_.PropertyId    as PropertyId1_0_
FROM   Photo photos0_
WHERE  photos0_.PropertyId = 129 /* @p0 */

更新 由于我有20个生成的查询,所有查询仅在最后一行

WHERE photos0_.PropertyId = xxx /* @p0 */

其中数字是照片ID对象,我必须根据nhibernate profiler添加我对此查询的SELECT N + 1 ALERT。

2 个答案:

答案 0 :(得分:1)

如果x.Photos不是IQueryable,则.First()调用不能参与ORM发送的SQL查询。我怀疑是这种情况。

唯一的解决方案是从ISession手动构建查询。

答案 1 :(得分:0)

当表达式树被折叠时,NHibernate应该生成SQL以仅检索单个实体。