0

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

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

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

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

4

2 回答 2

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 .. 通常最好使用界面

于 2012-05-28T14:11:36.117 回答
-1
List<Entity> data = session.Query<Entity>()
      .Fetch(x=>x.Photos.FirstOrDefualt())//here You need get only first element          
      .ToList();
于 2012-05-28T12:06:24.990 回答