gpt4 book ai didi

entity-framework - EntityFramework Poco LoadProperty 过滤

转载 作者:行者123 更新时间:2023-12-01 02:52:39 25 4
gpt4 key购买 nike

在 POCO 中,我通过 LoadProperty 使用显式加载来加载数据。我需要从加载的属性中过滤和排序数据并返回主对象。

比如说,有一个相册类,其中的照片是一个集合。我需要从 DAL 返回“专辑”对象。所以,代码将是

public Album GetPhotos()
{
using (var context = new Entities())
{
//....code for loading album....
context.LoadProperty(album, "Photos");
//I need to return ONLY the latest 10 photos
// album.Photos = album.Photos.OrderByDescending(a=>a.CreateDate).Take(10); //DOES NOT WORK
return album;
}
}

现在在上面的代码中,我只需要返回最新的 10 张照片,我无法按照代码所示对照片集进行过滤或排序。处理这个问题的最佳方法是什么?即使我们创建了一个新对象,我们如何将所有专辑信息复制到新专辑中?

最佳答案

就像上面提到的,如果你想要任何类型的自定义导航属性加载(例如过滤或排序),那么你不能使用内置的显式预先/延迟加载方法(例如加载)。由于您使用的是 POCO,因此您只有 2 个选择:

匿名类型的过滤投影:

var album = context.Albums.Where(a => a.AlbumId == 1).Select(a => new  
{
a,
Photos = a.Photos.OrderByDescending(alb => alb.CreateDate).Take(10)
});

这将返回一个匿名类型,这可能并不总是可取的,在这种情况下还有另一种方法:

两个跟踪查询:
Album album = context.Albums.Where(a => a.AlbumId == 1).Single();
List<Photo> photos = context.Photos
.Where(p => p.AlbumId == 1)
.OrderByDescending(a => a.CreateDate).Take(10)
.ToList();

foreach (Photo photo in photos)
{
album.Photos.Add(photo);
}

关于entity-framework - EntityFramework Poco LoadProperty 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4357886/

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