私は.Contains()
の方法を使用することについて何も見なかったので、なぜこの質問をしているのですか?thisのリストを保持するという質問がありました。.LINQを使用して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は同じままです –