0

設定

  1. 私は2つ持っていList<T>ます。
  2. データは正規化されておらず、さまざまなソースからのものであり、目的のロジックでの畳み込みを説明しています
  3. データ内の非公式の複合キーは、fieldA、fieldB、fieldCです。
  4. 「フィールド」は文字列(参照型)であるため、値がnullになる可能性があります。nullで一致する可能性のあるレコードを削除したいと思います。C#のnull参照は一致しますが、SQLでは一致しません。の追加!string.IsNullOrEmpty()は簡単です。
  5. これは、DB設計や関係代数に関する質問ではありません。
  6. 他の基準をカバーする他のロジックがあります。結果セットを広げる可能性があるように、示されているロジックを減らすことを提案しないでください。上記の#5を参照してください。

問題

非公式キーに基づいて、listBにないlistAのレコードを検索したいと思います。次に、部分的なキーの一致に基づいて、listAの結果をさらに絞り込みます。

問題のSQLバージョン:

select 
    listA.fieldA, listA.fieldB, matching.fieldC  
 from listA
 left join listB keyList on 
      listA.fieldA = keyList.fieldA and
      listA.fieldB = keyList.fieldB and
      listA.fieldC = keyList.fieldC
 inner join listB matching on
      listA.fieldA = matching.fieldA and
      listA.fieldB = matching.fieldB 
 where
    keyList.fieldA is null  
4

1 に答える 1

2

SQLからLINQ(ケース7-INおよびNOT IN句を使用してデータをフィルタリングする)

注: INとNOT INは、LINQクエリで同じ関数を使用しますが、!を使用するだけです。(ではない)それのシンボル。グラフィカルな表現は次のとおりです。

ここに画像の説明を入力してください

あなたが使う、where <list>.Contains( <item> )

var myProducts = from p in db.Products
                 where productList.Contains(p.ProductID)
                 select p;

または、次のようにリストを事前定義することもできます。

var ids = {1, 2, 3};

var query = from item in context.items
            where ids.Contains( item.id )
            select item;

「NOT」の場合は、「!」を追加するだけです。'Contains'ステートメントの前の演算子。

于 2012-06-04T17:10:30.367 に答える