2009-06-03 8 views
0

2番目の式を使用して最初のIDを持つものだけを選択するにはどうすればよいですか?リストを結合するためのlambda拡張

var list1= from x in objects select x.id; 


results=results.Where(r=>r.id== ???? ) 

私は結果だけIDを持つものをLISTA

から

TIA

EDITになりたい:私は修正立って、私は別にについて尋ねます問題を引き起こし、別の問題がありました。そう...

results.Where(r=>list1.Contains(r.id)) 

答えて

4

推測のビットは、(それを実行しようとしていない)、しかし:

var filteredResults = from obj in objects 
         join result in results on obj.id equals result.id 
         select result; 

これは、問題のコードの両方の行に置き換えられることに注意してください。あなたはいつも最初の要素だけのIDが必要な場合は

+0

これも機能しますが、どちらがより効率的であるのでしょうか? – zsharp

4

あなたには、いくつかのパフォーマンスをしたい場合は、たぶん

var ids = objects.ToDictionary(o => o.id); 

results.Where(o => ids.ContainsKey(o.id)); 
+0

かのトリッキー得る可能性がありますリスト1と結果には多くの項目が含まれています... –

+0

didnt work above上記を参照 – zsharp

+0

私はあなたの記述された問題の解決策としてこれに立っています – spender

4
results = results.Where(r => list1.Contains(r.id)); 
+0

didnt work above上記を参照してください – zsharp

+0

あなたは何をしなかったのですか?例外はありましたか?それはまさにそれが動作する方法です。 list1がintのリストである場合、結果内のオブジェクトのintプロパティをチェックして、それらがリストに存在するかどうかを確認します。私はちょうどいくつかのダミークラスで私のマシン上でそれをテストし、それは完全に働いた。エラーまたはより多くのコードを投稿してください... – BFree

+0

私は訂正されました、私はsepartelyについて尋ねる問題を引き起こす別の問題がありました。 – zsharp

2

同様

+0

これはエラーを起こした。これはlinqtosqlで動作するはずですか? – zsharp

+0

ええええええええええええええええええええええええええええええええええ、これはオブジェクトに対してのみLinqですSQLでlinからsqlに変換する場合は、質問(およびタグ)に指定する必要があります。 さらに、正確なエラーがあったと言ったら助けになります。 –

0

で行くことができる(list.Contains()はO(n)の複雑さを持っています)あなたはこれをしたいですか?

results.Where(R => objects.Any(O => o.id == r.id))

0

することは、あなたはそれを変数に格納し、ラムダ式

var results= from x in objects select x.id; 
int firstID = results.First().id ; 
results=results.Where(r=>r.id== firstID ) 

それとも、このように直接使用するためにそれを使用することができます。

var results= from x in objects select x.id; 
results=results.Where(r=>r.id== results.First().id ) 
関連する問題