2011-07-29 5 views
0

SQL問合せ(LINQ)の結果を含むリストを取る暗黙の変数があります。 このセットは、以前に選択されたリストの既存のクライアントを表します。
ストアドプロシージャを使用して、ドロップダウンを埋めるために使用される新しいクライアントセットを取得します。このデータセットを反復すると、既存のエントリのリストに既に含まれている場合は、それらのレコードが除外されます。暗黙的に型指定された変数に特定の値が含まれているかどうかを確認します。

暗黙的に型付き変数を使用してこのチェックを行うにはどうすればよいですか?

var existingClients = (from doc in TBL_Documents 
         join c in TBL_CONTACT on doc.CONTACTID equals c.CONTACTID 
         where doc.DOCID.Equals(DocID) 
         select new { c.CONTACTID, c.FULLNAME }).ToList(); 


var resultSet = sp_ActiveContacts(index).ToList(); 
foreach (var record in resultSet) 
{ 
    //How could I achieve something like this if condition (like a List)? 
    if (!existingClients.Contains(record.CONTACTID))    
    {         
     optionTags += "<option value=" + record.CONTACTID + ">" + record.Name + "</option>"; 
    }      
} 

可能であれば、私は、if条件で使用CONTACTIDを保管するための一時リストを作成するために避けてprefereでしょう。

答えて

2
あなたがこれを行うことができるように、各プロパティをチェックして平等のための

匿名型試験:(。。あなたのrecord変数がFULLNAME性質を持っていると仮定すると、それ以外の場合は、単に適切な値を持つ匿名オブジェクトを作成する)

if (!existingClients.Contains(new { record.CONTACTID, record.FULLNAME })) 

詳細はthis answerを参照してください。

編集が簡単

がまだあるかもしれない:良い答えを

if (!existingClients.Any(c => c.CONTACTID == result.CONTACTID)) 
+0

これは、はるかに読みやすくなっています。レコード変数に関連する他の値を作成する必要はありません(例の結果)。 – Francesco

0

おかげでマット!パフォーマンスに関して、あなたの提案と一時的なリストを使用してIDを保管し、このリストをチェックすることの違いは何ですか?

... 
List<Guid> existIDs = new List<Guid>(); 
foreach (var c in existingContacts) 
{ 
    existIDs.Add(c.CONTACTID); 
} 

var resultSet = db.sp_PagingActiveContacts(idx, userLogin, range).ToList(); 
foreach (var record in resultSet) 
{ 
if (!existIDs.Contains(new {record.CONTACTID})) 
{ .... 
+1

私はあなたがこのようにして何かを得るとは思わない。 .Any()の呼び出しはほぼ速くなり、IMHOは読みやすくなります。 –

関連する問題