我已阅读this关于在列表中保留顺序的问题,但我没有看到有关使用.Contains()
方法的任何内容,因此我为什么要问这个问题。使用.Contains保留与LINQ的订单
我已经创建了一个包装类可包含不同对象,如以下:
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,仍然保留过滤列表的顺序?
如果我需要提供更多信息,请让我知道!
'test'与未经过滤的'restaurantsCloseToUser'的顺序相同。您是否需要'contentBasedFiltered'的顺序? – dasblinkenlight
“filteredOnContent”的查询是什么?查询是否被排序?我没有看到为什么它的顺序应该改变,因为你只是添加另一个过滤器... –
唯一能够“销毁”顺序的是toDictionary和toLookup或者重新定义“order by”。如果你想要一个列表的顺序,用它作为“基础”,并选择另一个列表中的元素。 list.select ordre将保持不变 –