Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 创建按日期排序的事件提要_Asp.net Mvc_Linq - Fatal编程技术网

Asp.net mvc 创建按日期排序的事件提要

Asp.net mvc 创建按日期排序的事件提要,asp.net-mvc,linq,Asp.net Mvc,Linq,我正在尝试在用户页面上创建一个提要,如果用户最近喜欢某个东西、创建了一个项目、对一篇文章发表了评论等,它将在其中显示。我将如何做到这一点?我想把从数据库中获得的不同信息列成一个对象列表,然后按日期排序,但我无法正确地排序代码。怎么样: var feed = db.Likes .Where(like => like.UserID == currentUserID) .Where(like => like.CreatedAt > createdSince)

我正在尝试在用户页面上创建一个提要,如果用户最近喜欢某个东西、创建了一个项目、对一篇文章发表了评论等,它将在其中显示。我将如何做到这一点?我想把从数据库中获得的不同信息列成一个对象列表,然后按日期排序,但我无法正确地排序代码。

怎么样:

var feed = db.Likes
    .Where(like => like.UserID == currentUserID)
    .Where(like => like.CreatedAt > createdSince)
    .OrderByDescending(like => like.CreatedAt)
    .Select(like => new {
        Type = "like",
        CreatedAt = like.CreatedAt
    })
    .Concat(db.Comments
        .Where(comment => comment.UserID == currentUserID)
        .Where(comment => comment.CreatedAt > createdSince)
        .OrderByDescending(comment => comment.CreatedAt)
        .Select(comment => new {
            Type = "comment",
            CreatedAt = comment.CreatedAt
        })
    );
根据需要添加更多Concat语句,只要它们投影到相同的结构(anon或实际类),就可以将它们合并到一个列表中

如果您不喜欢有一个庞大的语句,并且有一个类来存储项(例如,
Feed
),然后选择第一个类并执行
.ToList()
,那么您将有一个
列表
,可以为每个要包含的额外项集调用
.AddRange(LinqQueryAtreturnsFeedItems)


只需对每个列表进行排序并提供额外的过滤器。一旦将它们合并为一个列表,您就可以对合并列表进行排序。

好的,我最后做的是以下几点:

public class UserFeed
{
    public string Type { get; set; }
    public int Reference_Id { get; set; }
    public int Comic_Id { get; set; }
    public int Chapter_Id { get; set; }
    public int Page_Id { get; set; }
    public int User_Id { get; set; }
    public string Title { get; set; }
    public string Text { get; set; }
    public decimal Rating { get; set; }
    public string Image { get; set; }
    public DateTime Date { get; set; }
}

 List<UserFeed> userFeed = new List<UserFeed>();
 userFeed.AddRange(user.SelectMany(i => i.UserFavorites).Select(i => new UserFeed { Type = "UserFavorite", Reference_Id = i.UserFavorite_Id, Comic_Id = i.Comic_Id, Title = i.Comic.Title, Image = i.Comic.ComicImage, Date = i.DateFavorited }).OrderByDescending(i => i.Date).Take(6));
 userFeed.AddRange(Comics.SelectMany(i => i.ComicReviews).Select(i => new UserFeed { Type = "ComicReview", Reference_Id = i.ComicReview_Id, Comic_Id = i.Comic_Id, Title = i.Comic.Title, Text = i.Text, Rating = i.ComicRating.Rating, Image = i.Comic.ComicImage, Date = i.DatePublished }).OrderByDescending(i => i.Date).Take(6));
 userFeed.AddRange(Comics.SelectMany(i => i.Chapters).Select(i => new UserFeed { Type = "Chapter", Reference_Id = i.Chapter_Id, Comic_Id = i.Comic_Id, Title = i.Title, Image = i.Comic.ComicImage, Date = i.DatePublished }).OrderByDescending(i => i.Date).Take(6));
 userFeed.AddRange(Comics.SelectMany(i => i.Chapters.SelectMany(j => j.Pages)).Select(i => new UserFeed { Type = "Page", Reference_Id = i.Page_Id, Chapter_Id = i.Chapter_Id, Title = i.Title, Image = i.PageImage, Date = i.DatePublished }).OrderByDescending(i => i.Date).Take(6));
公共类用户提要
{
公共字符串类型{get;set;}
公共int引用_Id{get;set;}
public int Comic_Id{get;set;}
public int Chapter_Id{get;set;}
公共整数页_Id{get;set;}
公共int用户_Id{get;set;}
公共字符串标题{get;set;}
公共字符串文本{get;set;}
公共十进制评级{get;set;}
公共字符串图像{get;set;}
公共日期时间日期{get;set;}
}
List userFeed=new List();
userFeed.AddRange(user.SelectMany(i=>i.UserFavorites).Select(i=>newuserfeed{Type=“UserFavorite”,Reference_Id=i.UserFavorite_Id,Comic_Id=i.Comic_Id,Title=i.Comic.Title,Image=i.Comic.ComicImage,Date=i.DateFavorited}).OrderByDescending(i=>i.Date).Take(6));
userFeed.AddRange(Comics.SelectMany(i=>i.ComicReviews)。选择(i=>new userFeed{Type=“ComicReview”,Reference_Id=i.ComicReview_Id,Comic_Id=i.Comic_Id,Title=i.Comic.Title,Text=i.Text,Rating=i.Comiccrating.Rating,Date=i.DatePublished})。OrderByDescending(i=>i.Date)。取(6));
userFeed.AddRange(漫画.SelectMany(i=>i.Chapters).选择(i=>newuserfeed{Type=“Chapter”,Reference_Id=i.Chapter_Id,漫画Id=i.Comic_Id,Title=i.Title,Image=i.ComicImage,Date=i.DatePublished}).OrderByDescending(i=>i.Date).Take(6));
userFeed.AddRange(Comics.SelectMany(i=>i.Chapters.SelectMany(j=>j.Pages)).Select(i=>newuserfeed{Type=“Page”,Reference\u Id=i.Page\u Id,Chapter\u Id=i.Chapter\u Id,Title=i.Title,Image=i.PageImage,Date=i.DatePublished}.OrderByDescending(i=>i.Date)。取(6));

我尝试了以下方法:但我得到了一个
无法从'System.Linq.IQueryable'转换为'System.Linq.ParallelQuery
我非常确定数据匹配。最简单的解决方案是:创建一个类,并在select中而不是在一个非类中新建它,例如
select(comment=>newfeed){Title=comment.Title,CreatedAt=comment.DatePublished})
那么你就可以毫无问题地进行concat了。别忘了在末尾添加一个
userFeed=userFeed.OrderByDescending(feed=>feed.Date)
来对整个列表进行排序,除非你想要一块收藏夹,然后是一块评论,等等。