我已閱讀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將保持不變 –