我已阅读this关于在列表中保留订单的问题,但我没有看到有关使用.Contains()
方法的任何信息,因此我提出这个问题的原因。< / p>
我创建了一个包装类,它可以包含不同的对象,如下所示:
public class RecommenderItem
{
public Guid Id { get; set; }
public object Entity { get; set; }
}
我有一个命令列表的方法,无论对象的类型如何。在我调用命令此列表的方法之前,我从数据库中检索对象并将它们映射到RecommenderItem
。订购此列表后,我想将这些项目作为原始类型返回。
我已经成功完成了这项工作,但为了便于阅读,我想在我的整个方法中使用LINQ。目前,我正在设置我的输出列表:
var filteredOnContent = ContentBasedFilter.FilterBasedOnContent(ratedItems, itemsNotReviewed); //This is the function which orders the list. Both ratedItems and itemsNotReviewed are lists of RecommenderItems
var restaurantObjects = (from S1 in filteredOnContent
from S2 in restaurantsCloseToUser
where S1.Id == S2.Id
select S2).ToList();
在此示例中,restaurantsCloseToUser
是从数据库中检索到的列表。
我尝试过以下操作,但它不会保留已过滤列表的顺序。这非常重要,因为该列表是建议的前10位。
var test = restaurantsCloseToUser.Where(x => contentBasedFiltered.Select(r => r.Id).Contains(x.Id)).ToList();
有没有办法可以使用LINQ并仍保留已过滤列表的顺序?
如果我需要提供更多信息,请与我们联系!
答案 0 :(得分:3)
如果我理解正确,contentBasedFiltered
是有序列表,您希望restaurantsCloseToUser
中的原始项目按照contentBasedFiltered
中的顺序排列。所以我尝试以下方法:
var test = contentBasedFiltered.Select(x => restaurantsCloseToUser.FirstOrDefault(r => r.Id == x.Id)).ToList();
这会按照contentBasedFiltered
的顺序返回一个列表,但会使用restaurantsCloseToUser
中的项目。