我有两个数据流,这两个数据都包含日期信息。
我从第一个获得10个项目,这是一个SQL数据库,10个项目来自第二个项目,这是一个Twitter提要。
当请求进入以获取更多数据时,它会从每个源检索下10个项目。
我发现的问题是来自数据库源的第二组10项可能比Twitter中的前10项更新,所以你有这样的数据
DB - Today
DB- Today \\1st result set
Twitter - Yesterday
Twiter - Yesterday
\\\\\\\\\\\\\\\\\\\\\\\\\\\
DB - Today
DB - Today \\2nd result set
Twitter - 3 days ago
Twitter - 4 days ago
当用户看到日期结束时,这显然没有多大意义。
我唯一能想到的是从twitter中检索所有数据,而不是一次检索10条记录,然后使用LINQ进行数据库数据和推特数据的连接,然后按日期排序。
有人能想到更好的方法吗?
答案 0 :(得分:0)
拥有一个包含所有邮件的数据结构,不管它们的来源如何都不容易吗?
例如,您可以拥有一个“消息”列表,该列表将由数据库或Twitter订阅源填充。然后,您可以按日期排序此列表并显示它。
我认为这会缓解这个过程。
答案 1 :(得分:0)
如果要将两个源混合到单个分页结果中,则必须获取额外数据。请考虑使用pagesize = 10
的这些示例第1页:
由于所有10条记录可能来自一个来源,因此您必须准备好每条来源的10条记录。
对于第2页,不知道第1页上的内容:
第2页可能包含来自第1页未显示的来源的前10条记录,或第1页上显示的来自源的第10条记录...因此您必须请求40条记录才能涵盖所有内容可能会出现在第2页。
对于知道第1页上的内容的第2页,请使用未使用的page1记录并请求足够的记录,使您从每个来源获得10个。
从每个来源获得10条新记录后,就像第1页一样解决问题。
第3页及以后,
答案 2 :(得分:0)
我从Twitter返回所有数据并将其合并到数据库中的数据中:
var dbAllData = Post.All(); //IQueryable
UserTimelineOptions options = new UserTimelineOptions();
options.ScreenName = "USERNAME";
options.Count = 5000;
options.IncludeRetweets = true;
TwitterStatusCollection recentTweets = TwitterTimeline.UserTimeline(options);
var dbAllMerged = dbAllData.AsEnumerable().Select((title) => new BlogData { Title = title.Title, Date = title.Date, RelativeDate = title.Date.ToRelativeDate(), Text = title.Text, DBRecord = true });
dbAllMerged = dbAllMerged.Concat(recentTweets.Where(y => !y.Text.StartsWith("@")).Select((tweet) => new BlogData { Title = "", Date = tweet.CreatedDate, RelativeDate = tweet.CreatedDate.ToRelativeDate(), Text = tweet.Text, DBRecord = false })).OrderByDescending(x => x.Date);