2009-07-22 1 views
1

大規模なテーブルからlinq-to-SQLを使用して、ビジネスオブジェクトに数行のデータを取得しました。linq-to-sql既存の行と一致しない行をいくつか取得するにはどうすればよいですか?

今、私は比較関数をテストするために一致しないいくつかの行を取得したいと思います。

私は非サポート例外を取得する仕事だろうと思ったものを使用する:

ローカルシーケンスが含まれています()演算子を除き、クエリ演算子のSQL実装にLINQで使用することはできません。

//This table has a 2 field primary key, the other has a single 
var AllNonMatches = from c in dc.Acaps 
    where !Matches.Rows.Any((row) => row.Key.Key == c.AppId & row.Key.Value == c.SeqNbr) 
    select c; 

foreach (var item in AllNonMatches.Take(100)) //Exception here 
{} 

テーブルが複合主キーがあります:APPIDとSEQNBRを

ここではコードです。

Matches.Rowsは、keyvaluepair(appid、seqnbr)の辞書として定義されています。

およびローカルシーケンスは、ローカルディクショナリのように見えます。

答えて

0

テーブルplzの構造と名前に関する詳細情報を提供できますか?

ないあなたは...

編集やろうとしているものを確認してください。

[OK]を..私は、私は今それを得ると思いますが...

あなたが/マージすることはできません表示されますローカル表(辞書)をSQL表と結合する。 できれば、私はそれをやる方法がわからないのではないかと心配しています。

私は考えることができる最も簡単な解決策は次のように、使用LINQからSQLへ、あなたのテーブル「Acaps」に関連する外部キーを持つテーブル(例えば「マッチ」)で、それらの結果を置くとしています& 0(正常に動作します

var AllNonMatches = from c in dc.Acaps 
    where !(Matches.Rows.ContainsKey(c.AppId) && Matches.Rows.ContainsValue(c.SeqNbr)) 
    select c; 

は、私はまた、ビット単位のAND演算子を使用しています。
var AllNonMatches = dc.Acaps.Where(p=>p.Matchs==null).Take(100).ToList(); 

申し訳ありませんが、私はこれは何についてのより良い=(

+0

質問が更新されました – Maslow

0

を思い付くことができませんでした) - 標準のAND演算子よりもパフォーマンスを向上させるのに適した用語だと思います。

+0

これは正しくない場合があります。 - (A、B)と(C、D)の2つの関連項目が一致するとします。現在、(A、D)のようなアイテムを選択しています。このアイテムはマッチには存在しません(したがって、選択する必要があります)が、マッチに両方の値が存在するため返されません(同じアイテムにはありません)。 –

+0

これは、質問者が何を必要としているかによって異なります。この解決策で十分です。また、私はContainsKey()とContainsValue()がうまくいくかどうかは疑問です。おそらくKeys.Contains()とValues.Contains()を使用する必要があります。 –

関連する問題