我已阅读 this关于在列表中保留顺序的问题,但我没有看到任何关于使用 .Contains()
方法的信息,因此我问这个问题的原因。
我创建了一个可以包含不同对象的包装器类,如下所示:
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 并仍然保留筛选列表的顺序?
如果我需要提供更多信息,请告诉我!
最佳答案
如果我理解正确,contentBasedFiltered
是有序列表,您想要来自 restaurantsCloseToUser
的原始项目,但按照它们在 contentBasedFiltered
中的顺序.所以我会尝试以下操作:
var test = contentBasedFiltered.Select(x => restaurantsCloseToUser.FirstOrDefault(r => r.Id == x.Id)).ToList();
这将按 contentBasedFiltered
的顺序返回一个列表,但包含来自 restaurantsCloseToUser
的项目。
关于c# - 使用 .Contains 保留 LINQ 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41425074/