选择包含CSV,但保持排序顺序
本文关键字:排序 顺序 包含 CSV 选择 | 更新日期: 2023-09-27 18:08:15
我有这样一个场景,我在一个名为csv的变量中有一个IList<Guid>
,这也是我需要保持的特定顺序。然后我做一个选择包含喜欢,所以我可以得到我所有的主题基于我的指南列表。
向导来自lucene搜索,按照每个LuceneResult的原始分数排序。这就是为什么我要把它们按这个顺序放。
var results = _context.Topic
.Where(x => csv.Contains(x.Id));
然而。我弄丢了订单,我一做这个向导就来了。我怎么能做到这一点,但保持相同的顺序,我手的指南列表的上下文,并根据topid.Id以相同的顺序获得主题回来?
我已经尝试了下面提到的,通过做一个连接,但他们仍然出现在相同的顺序?请注意,我也在分页这些结果。
var results = _context.Topic
.Join(csv,
topic => topic.Id,
guidFromCsv => guidFromCsv,
(topic, guidFromCsv) => new { topic, guidFromCsv }
)
.Where(x => x.guidFromCsv == x.topic.Id)
.Skip((pageIndex - 1)*pageSize)
.Take(pageSize)
.Select(x=> x.topic);
** UPDATE **
所以我已经离开了只是使用和引导,我试图在我的lucene模型中传递我想要订购的分数属性。这是我的
public PagedList<Topic> GetTopicsByLuceneResult(int pageIndex, int pageSize, int amountToTake, List<LuceneSearchModel> luceneResults)
{
var results = _context.Topic
.Join(luceneResults,
topic => topic.Id,
luceneResult => luceneResult.Id,
(topic, luceneResult) => new { topic, luceneResult }
)
.Where(x => x.luceneResult.Id == x.topic.Id)
.OrderByDescending(x => x.luceneResult.Score)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.Select(x => x.topic);
var topicResults = results.ToList();
// Return a paged list
return new PagedList<Topic>(topicResults, pageIndex, pageSize, topicResults.Count);
}
然而,我现在得到以下错误?我所做的是可能的吗?
无法创建类型为"LuceneSearchModel"的常量值。
如果我正确理解了这个问题,您希望根据csv过滤主题,并希望以与csv相同的顺序返回结果。如果是这样:
var results = csv
.GroupJoin(_context.Topic, guid => guid, topic => topic.Id,
(guid, topics) => topics)
.SelectMany(topics => topics);
重要的是要注意,这将_context.Topic
视为IEnumerable<T>
;因此,它将从数据库中获取所有主题,并在客户端执行GroupJoin,而不是在数据库上。
编辑:根据下面的评论,这个答案不是你想要的。我将把答案留在这里作为文档。