繁体   English   中英

合并模型结果的最佳方法是什么

[英]What is the best way to combine model results

我试图将两种不同的模型组合为一种模型,以便将结果筛选为一个列表。

模型:

    public partial class OverviewItems
{
    // Videos and Images combined for overview
    [NotMapped]
    public List<dynamic> Item { get; set; }
}

我的控制器:

public ActionResult LoadItems(int skip = 0, int take = 4)
        {
            OverviewItems items = new OverviewItems();
            // get al the videos an images, order them by creaton date. Take onyly the latest videos/images combined.

        var images = db.Images.Where(i => i != null && i.Items != null && i.Items.Count() > 0).OrderByDescending(i => i.CreatedOn).Take(take).Skip(skip) as IEnumerable<object>;
        var videos = db.Videos.Where(v => v != null && !string.IsNullOrEmpty(v.Watch_id)).OrderByDescending(v => v.CreatedOn).Take(take).Skip(skip) as IEnumerable<object>;

        items.Item.Add(images);
        items.Item.Add(videos);

        // ViewBag.Items = images.Concat(videos);
        return PartialView("OverviewItems", items);
    }

视频和图像是带有项目的实体框架类。

    public partial class Videos : OverviewItems
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    [StringLength(250, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 2)]
    public string Title { get; set; }

图片模型也一样。 但是当然会具有不同的属性。

我也尝试过使用ViewBag,但由于视频和图像的类型不同,即使我将它们转换为动态图像,也无法正常工作。

我错过了哪一部分? 是否有一个简单的解决方案来组合这两个集合,以便我可以轻松地将项目过滤/获取/跳过为一个部分?

public abstract class OverviewItems
{
    public abstract string GetTitle();
}   

public class Videos : OverviewItems
{
    public string videoTitle { get; set; }
    public override string GetTitle()
    {
        return videoTitle;

    }
}

public class Images : OverviewItems
{
    public string imagesTitle { get; set; }
    public override string GetTitle()
    {
        return imagesTitle;

    }
}

 IList<OverviewItems> items = new List<OverviewItems>();

 var images = db.Images.Where(i => i != null && i.Items != null && i.Items.Count() > 0).OrderByDescending(i => i.CreatedOn).Take(take).Skip(skip).ToList();
 var videos = db.Videos.Where(v => v != null && !string.IsNullOrEmpty(v.Watch_id)).OrderByDescending(v => v.CreatedOn).Take(take).Skip(skip).ToList();

items.Add(images);
items.Add(videos);

var filtredItems = items.where(i=>i.GetTitle() == "SomeTitle");

尝试“ Concat”方法

var images = db.Images.Where(i => i != null && i.Items != null && i.Items.Count() > 0).OrderByDescending(i => i.CreatedOn).Take(take).Skip(skip) as IEnumerable<object>;

var videos = db.Videos.Where(v => v != null && !string.IsNullOrEmpty(v.Watch_id)).OrderByDescending(v => v.CreatedOn).Take(take).Skip(skip) as IEnumerable<object>;

var combined = images.Concat(videos);
items.Item.Add(combined);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM