1

BIML ファイルで作業しているときに、SQL クエリを使用しDataTablesた呼び出しを介して入力している 2 つがあります。ExternalDataAccess.GetDataTable私は一方の内側をもう一方の内側にループしており、内側の値を外側の値でフィルタリングすることにより、2つを「結び付け」ようとしています。

次のようにコーディングすることで、これを回避しました。

foreach (DataRow t in Target.Rows) {
    foreach (DataRow c in Columns.Rows) {
        if (c["Object"].ToString() == t["ReferenceObject"].ToString()) {
            //...
        }
    }
}

foreachただし、内側のループをフィルタリングする方法があると思います。中には1000枚のレコードもあるかもしれませんDataSet ここは私の経験不足が光っているところです。

foreach (DataRow t in Target.Rows) {
   foreach (DataRow c in Columns.Rows.Where(z => z["Object"].ToString() == t["ReferenceObject"].ToString())) {
       //...
   }
}

エラーが表示されます: 'System.Data.DataRowCollection''Where' の定義が含まれておらず、拡張子がありません*...これが有効でないことはわかっていますが、本質的にはそれが私がやろうとしていることです。foreach外側のループの値に基づいて内側のループをフィルタリングする方法はありforeachますか?

4

3 に答える 3

2

テーブルの DataRows を列挙するには、AsEnumerable拡張機能を DataTableに適用する必要があります

foreach(DataRow row in Columns.AsEnumerable()
                .Where(z => z.Field<string>("Object") == 
                            t.Field<string>("ReferenceObject"))
 ......

ただし、可能であれば、DataSet レベルで DataRelationを使用して 2 つのテーブルを結合する可能性を探りたいと思います。

これは、作成した 2 つのテーブルの親/子レコードをナビゲートする方法に関するMSDN の例です。DataRelation

于 2015-02-10T15:32:12.307 に答える
1

AsEnumerable と Field は System.Data.DataExtensions アセンブリから取得されるため、その参照を BIML ファイルに追加する必要があります。また、System.Data をインポートして名前空間を BIML コードで使用できるようにする必要があります。

例えば

<#@ assembly name="System.Data.DataSetExtensions" #>
<#@ import namespace="System.Data" #>

注: 例を単純にするために、上記の完全修飾アセンブリ名は指定していません。

ただし、マシンに .NET Framework のバージョンが 1 つ以上ある場合は、アセンブリの完全修飾名を使用する必要があります (BIML が使用するバージョンを認識できるようにするため)。

gacutil を使用してインストールされたアセンブリの完全修飾名を見つけることができます。

コマンド プロンプトを起動し、Visual Studio のインストール場所 (例: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC) の VC ディレクトリに移動します。

次に、次のように入力します。

gacutil /l <assembly name>

これにより、インストールされたアセンブリの各バージョンの完全修飾名が返されます。私のマシンには .NET 3.5 と 4.0 のバージョンがありました。BIML で最新バージョンを使用することにしました。

System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
于 2016-01-16T10:27:16.470 に答える