質問: コンテキストで検索する必要がある文字列の配列があります。 `List nameList` 検索するコンテキストがあります `context.Name` ここに私のコードがあります: ``` List nameIds= context.Name .Where(n => nameList.Contains(n.Description) .Select(n=> n.NameId) .ToList(); ``` 私は自分の名前のIDを取得できますが、コンテキスト自体ではなく、 `nameList`で順序付けする`nameList`があります。 例えば。私のデータベース上の名前は、それぞれ[0、1、2] idの[Ben、Maria、Liza]です。そして、私の`nameList`は[Liza、Maria]です。 `nameIds`はコンテキストによって順序付けられるため、[1,2]になります。 `nameList` 。 [2,1]
回答: Linq `Join`および`OrderBy`操作により、 `nameList`アイテムの順序に基づいて順序付けを行うことができます。以下のステートメントの結果には、 `NameId`のアイテムの順序に基づいた`NameId`コレクションが`nameList`ます。 ``` List nameIds = context.Name.Where(n => nameList.Contains(n.Description)).ToList() .Join(nameList, n => n.Description, l => l, (n, l) => new {n.NameId, l}) .OrderBy(o => o.l) .Select(s => s.NameId).ToList(); ``` 上記に気づいた場合: * `Where with Contains`クエリをそのままにして、フィルター処理されたデータのみがデータベースから返されるようにしました。この句を削除して直接結合を行うと、DBからデータの完全なセットが返され、アプリケーションの**パフォーマンスの**問題が発生する可能性があります。 * 返された`IQueryable` 、 `ToList`はクエリを実行してデータベースからデータを取得します * `Join`操作は、DBデータと`nameList` * `OrderBy`は、説明に基づいてデータを`nameList`ます( `nameList`アイテムの実際の順序) * `Select`はNameIdを選択します この dotnetfiddleを作成して 、linqステートメント全体の動作をデモしました。