none
有什么好的办法来几个Model联合起来。 RRS feed

  • 问题

  • 我有2个不同的model,我想把他们联合起来,然后再根据条件查询。

     

    Model

        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);

        }

     

    Videos 和 images 是EF的实体类。

     

    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; }

     

    Image和 Vidoes一样继承自OverviewItem,但是有一些不同的属性。

     

    上面的控制器代码不能正常工作,我想问一下,有没有什么好的方法使它们组合起来,再查询。

    2016年2月13日 14:46

答案

  • 你好,

    可以建一个抽象方法来实现:

    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");

    Best regards,

    Cole Wu

    2016年2月14日 14:24
    版主