从集合中获取第一个元素时出错

时间:2012-05-28 11:34:20

标签: c# linq nhibernate

我正在尝试从此集合中获取第一个元素

List<Entity> data = session.Query<Entity>()
                       .Fetch(x => x.Photos.First())
                       .ToList();

我收到了这个错误。 获取请求必须是简单的成员访问表达式; '[100002]'是一个SubQueryExpression。参数名称:relatedObjectSelector。

现在我正在使用.fetch(x =&gt; x.Photos.First())因为我知道第一个元素将始终被填充,并且它是。我确实需要集合中的第一个元素来减少加载时间,所以这是我需要的精确解决方案,但是我收到了这个错误。

2 个答案:

答案 0 :(得分:2)

Fetch将获取整个集合,你不能告诉它只是使用“fetch”获取第一个元素,但你可以使用投影或类似的东西获得所需的效果:

        var subQ = QueryOver.Of<Entity>()
            .SelectList(x => x.SelectMin(y => y.Photos)); // sub query selecting min photo id from entity

        List<Photo> data = session.QueryOver<Photo>()                
                               .Fetch(x => x.Entity).Eager // eager load the entity
                               .WithSubquery.WhereProperty(x => x.Id).In(subQ) // restrict the photo to those that are the first ones for the entity
                               .List() // execute query from database
                               .ToList(); // convert to List

虽然我不确定为什么你想要一个List而不是IList ..通常最好使用界面

答案 1 :(得分:-1)

List<Entity> data = session.Query<Entity>()
      .Fetch(x=>x.Photos.FirstOrDefualt())//here You need get only first element          
      .ToList();