私は2つのデータセットの交差を見つけるために2つのデータセット(複雑なオブジェクトまたはSQLデータのリスト - LINQ to Entities)を持っています。下図のように複雑なプロパティの具体交差点、「HashData」:データの2つのセット(リスト)の交差
右のセットは常に約100のサブセットでありながら、左のセットは、およそ10000行である可能性が高いです行。私はそれを格納するときに "Hashdata"によって左のセットを並べ替えると、検索を行うことは、バイナリ検索アルゴリズムのいくつかの並べ替えを使用してずっと速くなるだろう、しかし、私は質問に関連しない理由でこれを行うことはできません。
データのより小さいサブセットは決してSQLに格納されません(説明のために、以下のSQLテーブルにのみ示されています)。実行時にList<ShowData>
に表示されます。
recording
は100行のリストがあると
ShowData
は10000行のリストである。)このようにマッチング:だから、基本的に
List<ShowData> ShowData = (from showData in context.ShowDatas
where (showData.Show.Id == advert.Id)
orderby showData.HashData ascending
select showData).ToList();
foreach (ShowData recording in recordingPoints) {
foreach (ShowData actual in ShowData) {
if (recording.HashData == actual.HashData) {
}
}
}
しようとして何イム
HashData(小さなセットから)がShowDataでは見つかりますが、DBへのLINQ to Entityの初期クエリではShowDataオブジェクト(大きなセット)のリストを返します。
私はと親しま:
private IEnumerable<ShowData> xyz(List<ShowData> aObj, List<ShowData> bObj)
{
IEnumerable<string> bStrs = bObj.Select(b => b.HashData).Distinct();
return aObj.Join(bStrs, a => a.HashData, b => b, (a, b) => a);
}
こんにちはジョシュ私はこれを試みました: 'public bool Equals(ShowData x、ShowData y) { //比較されたオブジェクトが同じデータを参照しているかどうかを確認します。 if(Object.ReferenceEquals(x、y))がtrueを返します。 //比較対象のオブジェクトがnullかどうかを確認します。 if(Object.ReferenceEquals(x、null)|| Object.ReferenceEquals(y、null)) falseを返します。 //商品のプロパティが等しいかどうかを確認します。 return x.HashData == y.HashData; } ' – user1112324
しかし、これがどのようにコンパイルされているのか分かりません.iEnumerableにはIntersectの定義がありません –
user1112324
@ user1112324 - 'System.Linq'と ' System.Collections.Generic '? Intersectは、確かにIEnumerableの拡張メソッドです。 –