問題タブ [linq-to-dataset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2653 参照

linq - エンティティ モデルをデータセットに変換する - これは可能ですか?

ここで非常にイライラしています...通常、ネット上のどこかで.Netの複雑な問題に対するある種の答えを見つけることができますが、これは私にはわかりません。私は、LINQ to Entity クエリの結果を DataSet に変換して、既存のビジネス ロジックでデータを処理できるようにする必要があるシナリオにいます。

EntityCommand がリーダーを生成するような基本的なアプローチを試しましたが、 DataTable.Load() が例外をスローするため、これは機能しません (EntityCommand によって生成されたリーダーは GetSchemaTable() をサポートしていません)。

Entity to IDataReader(http://l2edatareaderadapter.codeplex.com/) のような [おそらく] フレンドリーなアプローチも試しましたが、これは例外をスローし、ドキュメントはほとんどなく、2008 年以来触れられていません。

私が見つけた別のアプローチはこちら (http://blogs.msdn.com/b/alexj/archive/2007/11/27/hydrating-an-entitydatareader-into-a-datatable-part-1.aspx) ですが、コードの作業コピーがありません。スニペットのみ。

第一に、MS がこの下位互換性アイテムをすぐに提供しなかったとは信じがたいです。第二に、コミュニティによって作成されたものでもなかったと思います。

利用可能な商用ソリューションも検討したいと考えています。

どうも!

0 投票する
1 に答える
321 参照

linq-to-dataset - DataTable行で列を検索する

実行すると、「演算子'&&'はタイプ'ラムダ式'および'ラムダ式'のオペランドに適用できません」というエラーが発生します。

最新のものが実行され、必要なものが得られます。

質問-なぜ最​​初のコードにエラーがあるのですか?

0 投票する
1 に答える
514 参照

linq-to-dataset - 列値の取得

cityStateTaxes は DataRow ですが、FirstOrDefault() 内で列の値を取得できないのはなぜですか?

ありがとう、

0 投票する
2 に答える
101 参照

c# - Binding a data source but displaying something else

I have quite a few places where I need to bind form controls directly to a backing database. I'm using LINQ to DataSet to do this.

For example, I have a ComboBox with entries filled in by a database query. The problem is of course that all of my data uses numerical IDs and I need to do a table query to translate this into user-readable options.

Normally I would just join the second table and use the combobox DisplayMember to point at the user-readable string column. This doesn't work because after using join or any projections on the query you're (understandably) unable to convert that query into a DataView.

It's hard to believe that this problem isn't run into by everyone who uses DataView. Is there any way to override my form controls' behavior to make them display a function of their value? Like if their Value is v, then they display SomeMethod(v)?

0 投票する
2 に答える
509 参照

.net - LINQからDataSetへのGroupBy

背景

MySQLデータベースからSQL-Serverデータベース(レポートおよび後でSSAS-Cube用)にデータをインポートしています。同時にデータを正規化したい。Ticket_IDs他の有用な情報を含むテーブル内の1つのレコードに繰り返しをグループContact化し、サブテーブルContactDetailにrawdataを残します(Contactへの外部キーを使用)。したがって、のすべてのレコードにContactは一意のがありTicket_IDます。

インポートには強い型のデータセットを使用することにしました。今、私はすでにTicket_IDを追加したかどうかを検出するための最良の方法は何であるか疑問に思っています。すべてのループ(〜100000レコード)でそれをチェックできましたが、より良い/より速い方法があると思います。

簡略化されたサンプルデータ:

これはContact-tableである必要があります

質問

LINQ / LINQ-to-DataSetを使用して、Ticket_IDでグループ化し、すべてのContactRowのContactDetailRowsのリストを取得することは可能ですか?GroupBy -Extensionがあることは知っていますが、使用方法と、それが必要なことを実行するかどうかがわかりません(ContactDetail-Rowsを保持し、Ticket_IDをキーおよびList(of EmailRow)値として持つ辞書のようにします)。

これは私が持っているものです(簡略化):

  • src:型付きDataSet(MySQL)
  • src.email:入力されたDataTable=>にContactDetail
  • dest:型付きDataSet(SQL-Server)
  • dest.ContactタイプされたDataTable
  • dest.ContactDetailfkを使用してDataTableと入力しましたContact

私はまだLINQに精通しておらず、構文がC#でかなり異なるため、VB.NETを好みます。

編集:

@Magnusのおかげで、次のようになりました。

これが、連絡先がすでに作成されているかどうかを検出するためのHashSetを使用した反復アプローチよりも高速であるかどうかを確認します。

0 投票する
1 に答える
661 参照

.net - スキーマが異なる 2 つの型の DataTable で異なる行を取得する

TableA のスキーマが TableB とは異なる TableB にない TableA からすべての行を取得する方法 (それらは異なる dbms から来る異なる型指定された DataTable クラスです)?

ここに画像の説明を入力 ここに画像の説明を入力

countryas にcountry_idないすべての行が必要CountryですidCountry

src.countryこれらは異なるスキーマを持っているため (そしてdest.Country異なる DataTable-classes であるため) 、これは機能しません。

srcdest強い型指定された DataSetです

注:必ずしもVB.NETであるとは限りません

2 番目のパラメーターとして指定する必要があるとIEqualityComparer思いますが、方法がわかりません。おそらく、新しい行を識別するための別の(より高速な)アプローチがあります。

背景:

MySQL データベースから SQL-Server データベースにテーブルをインポートしています。主キーのみをチェックし、行の内容を比較しないことで十分です。この例のテーブルには数行しか含まれていませんが、2 つのテーブルには約 100000 行が含まれているため、ソースと宛先の同期ではパフォーマンスが重要になります。

0 投票する
1 に答える
638 参照

.net - LINQで自己参照テーブルの「レベル」を取得するにはどうすればよいですか?

CategorypkidCategoryと自己参照外部キーを含むテーブルがありますfiCategory。つまり、。の場合、カテゴリは「メインカテゴリ」 fiCategory is nullです。別のカテゴリにリンクしている場合fiCategory、それはそのサブカテゴリです。ただし、このサブカテゴリにも1-n個のサブカテゴリがあることも有効です(fiCategoryそれにリンクしていidCategoryます)。

Q:メインカテゴリ、サブカテゴリ、「サブサブカテゴリ」などのリストを取得するにはどうすればよいですか。LINQで?

背景

型指定されたDataSetを使用して、Server1/MySQLのデータをServer2/MSSQL-Serverのデータと比較しています。正規化とクリーニング(いくつかの不整合があります)の後、新しいデータをSQL-Serverにインポートしたいと思います。まず、メインカテゴリをインポートし、次にサブカテゴリをインポートする必要があります。そうしないと、SQL-Serverは、まだ挿入されていないカテゴリに外部キーを含む行を挿入しようとすると、制約例外をスローします。

これらはテーブルです(左のMySQLソース、右のSQL Server宛先テーブル):

Kategorie:MySQL-ソース カテゴリ:SQL-Serverの宛先

ここでは、SQL-ServerにないMySQLの新しい行を取得しています。

srcdestはDataSetsと入力されます

ここで、新しい行をインポートします。このようにして、すべての「メインカテゴリ」を取得します。

このようにして、すべてのサブカテゴリを取得します。

両方のLINQクエリが機能していますが、サブカテゴリのすべての「レベル」を取得するにはどうすればよいですか?「上」から「下」に行を挿入する必要があります。どんな深さでも機能する方法はありますか?

少なくともこれは機能していません(pk値を繰り返します):

私はまだLINQを学んでいて、あらゆる種類の提案に感謝しています(C#でも)。前もって感謝します。

:SQL-Serverで外部キー制約を一時的に無効にし、ADO.NETからすべての行を挿入した後に有効にする方法を知っているかもしれません。それははるかに簡単でしょう。


@Tridusのおかげで、これが解決策です。

これは再帰関数です:

0 投票する
2 に答える
1664 参照

.net - 警告: 「ラムダ式で反復変数を使用すると、予期しない結果になる可能性があります」

編集:これは、この問題のより単純な例です(元の質問を削除しました):

したがって、最初の反復では安全であるのに、2回目の反復で予期しない結果が生じる可能性があるとコンパイラが考える理由はまだわかりません。@ee-m の興味深いリンクがこの動作の理由を提供しているとは思いません(これはfor-each問題ではなくFor n1 As Int32 = 1 To 3、コンパイラの警告にもなります)。

以下が「ベストプラクティス」であるべきだと私は本当に確信していません:

@Meta-Knightがすでに強調しているように、ローカル変数number1は冗長であり、コードを読みにくくします。注: 3 つの方法はすべて安全で、正しい結果が得られます。

0 投票する
3 に答える
1141 参照

c# - フィールドの使い方タイプで?

の列の最小値と最大値を決定するメソッドがありますDataTable:

これを次のようにリファクタリングしたい:

データ型を決定し、ハードコーディングの代わりに使用する必要がありますm.Field<double>。これを行う方法?

UPDATE最小値と最大値の差を計算したい 理由について

0 投票する
1 に答える
3274 参照

.net - LINQ を使用して 2 つの列の重複を取得する

LINQ は私を夢中にさせます。次のクエリが重複を返さないのはなぜですか? 私のエラーはどこですか?


編集: @Jon Skeetの回答のおかげで、以下は完全な解決策です:)

keyグループ化の主な問題は、それらをプロパティにする必要があることでした。上記のコードの次の問題は、元のテーブルから重複した行を取得することでした。ほぼすべての行に (2 つのフィールドによると) 重複があるため、結果の DataTable には、19 の重複値だけでなく、100 行中 99 行が含まれていました。最初の重複行のみを選択し、それらを PK の元のテーブルに結合する必要がありました。

これは私の場合は機能しますが、複合キーしかない場合、元のテーブルから重複のみを選択する方法を誰かが説明してくれるかもしれません。


編集:私は質問の最後の部分に自分で答えたので、ここに私が必要とするすべてがあります:

他の列を同じコンテキストに保持し、グループ化された複製の最初の行のみを返すために、 Let-Keywordが必要でした。このようCopyToDataTableにして、重複した行から DataTable を作成するために使用できます。

複数の列の重複を見つけて、それらの DataTable を作成するために、全体でわずか数行のコード (元のテーブルの行を見つけるために 2 番目のクエリを保存できます)。