問題タブ [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.
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 がこの下位互換性アイテムをすぐに提供しなかったとは信じがたいです。第二に、コミュニティによって作成されたものでもなかったと思います。
利用可能な商用ソリューションも検討したいと考えています。
どうも!
linq-to-dataset - DataTable行で列を検索する
実行すると、「演算子'&&'はタイプ'ラムダ式'および'ラムダ式'のオペランドに適用できません」というエラーが発生します。
最新のものが実行され、必要なものが得られます。
質問-なぜ最初のコードにエラーがあるのですか?
linq-to-dataset - 列値の取得
cityStateTaxes は DataRow ですが、FirstOrDefault() 内で列の値を取得できないのはなぜですか?
ありがとう、
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)?
.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
タイプされたDataTabledest.ContactDetail
fkを使用してDataTableと入力しましたContact
私はまだLINQに精通しておらず、構文がC#でかなり異なるため、VB.NETを好みます。
編集:
@Magnusのおかげで、次のようになりました。
これが、連絡先がすでに作成されているかどうかを検出するためのHashSetを使用した反復アプローチよりも高速であるかどうかを確認します。
.net - スキーマが異なる 2 つの型の DataTable で異なる行を取得する
TableA のスキーマが TableB とは異なる TableB にない TableA からすべての行を取得する方法 (それらは異なる dbms から来る異なる型指定された DataTable クラスです)?
country
as にcountry_id
ないすべての行が必要Country
ですidCountry
。
src.country
これらは異なるスキーマを持っているため (そしてdest.Country
異なる DataTable-classes であるため) 、これは機能しません。
src
dest
強い型指定された DataSetです
注:必ずしもVB.NETであるとは限りません
2 番目のパラメーターとして指定する必要があるとIEqualityComparer
思いますが、方法がわかりません。おそらく、新しい行を識別するための別の(より高速な)アプローチがあります。
背景:
MySQL データベースから SQL-Server データベースにテーブルをインポートしています。主キーのみをチェックし、行の内容を比較しないことで十分です。この例のテーブルには数行しか含まれていませんが、2 つのテーブルには約 100000 行が含まれているため、ソースと宛先の同期ではパフォーマンスが重要になります。
.net - LINQで自己参照テーブルの「レベル」を取得するにはどうすればよいですか?
Category
pkidCategory
と自己参照外部キーを含むテーブルがありますfiCategory
。つまり、。の場合、カテゴリは「メインカテゴリ」 fiCategory is null
です。別のカテゴリにリンクしている場合fiCategory
、それはそのサブカテゴリです。ただし、このサブカテゴリにも1-n個のサブカテゴリがあることも有効です(fiCategory
それにリンクしていidCategory
ます)。
Q:メインカテゴリ、サブカテゴリ、「サブサブカテゴリ」などのリストを取得するにはどうすればよいですか。LINQで?
背景:
型指定されたDataSetを使用して、Server1/MySQLのデータをServer2/MSSQL-Serverのデータと比較しています。正規化とクリーニング(いくつかの不整合があります)の後、新しいデータをSQL-Serverにインポートしたいと思います。まず、メインカテゴリをインポートし、次にサブカテゴリをインポートする必要があります。そうしないと、SQL-Serverは、まだ挿入されていないカテゴリに外部キーを含む行を挿入しようとすると、制約例外をスローします。
これらはテーブルです(左のMySQLソース、右のSQL Server宛先テーブル):
ここでは、SQL-ServerにないMySQLの新しい行を取得しています。
src
とdest
はDataSetsと入力されます
ここで、新しい行をインポートします。このようにして、すべての「メインカテゴリ」を取得します。
このようにして、すべてのサブカテゴリを取得します。
両方のLINQクエリが機能していますが、サブカテゴリのすべての「レベル」を取得するにはどうすればよいですか?「上」から「下」に行を挿入する必要があります。どんな深さでも機能する方法はありますか?
少なくともこれは機能していません(pk値を繰り返します):
私はまだLINQを学んでいて、あらゆる種類の提案に感謝しています(C#でも)。前もって感謝します。
注:SQL-Serverで外部キー制約を一時的に無効にし、ADO.NETからすべての行を挿入した後に有効にする方法を知っているかもしれません。それははるかに簡単でしょう。
@Tridusのおかげで、これが解決策です。
これは再帰関数です:
.net - 警告: 「ラムダ式で反復変数を使用すると、予期しない結果になる可能性があります」
編集:これは、この問題のより単純な例です(元の質問を削除しました):
したがって、最初の反復では安全であるのに、2回目の反復で予期しない結果が生じる可能性があるとコンパイラが考える理由はまだわかりません。@ee-m の興味深いリンクがこの動作の理由を提供しているとは思いません(これはfor-each
問題ではなくFor n1 As Int32 = 1 To 3
、コンパイラの警告にもなります)。
以下が「ベストプラクティス」であるべきだと私は本当に確信していません:
@Meta-Knightがすでに強調しているように、ローカル変数number1
は冗長であり、コードを読みにくくします。注: 3 つの方法はすべて安全で、正しい結果が得られます。
c# - フィールドの使い方タイプで?
の列の最小値と最大値を決定するメソッドがありますDataTable
:
これを次のようにリファクタリングしたい:
データ型を決定し、ハードコーディングの代わりに使用する必要がありますm.Field<double>
。これを行う方法?
UPDATE最小値と最大値の差を計算したい 理由について
.net - LINQ を使用して 2 つの列の重複を取得する
LINQ は私を夢中にさせます。次のクエリが重複を返さないのはなぜですか? 私のエラーはどこですか?
編集: @Jon Skeetの回答のおかげで、以下は完全な解決策です:)
key
グループ化の主な問題は、それらをプロパティにする必要があることでした。上記のコードの次の問題は、元のテーブルから重複した行を取得することでした。ほぼすべての行に (2 つのフィールドによると) 重複があるため、結果の DataTable には、19 の重複値だけでなく、100 行中 99 行が含まれていました。最初の重複行のみを選択し、それらを PK の元のテーブルに結合する必要がありました。
これは私の場合は機能しますが、複合キーしかない場合、元のテーブルから重複のみを選択する方法を誰かが説明してくれるかもしれません。
編集:私は質問の最後の部分に自分で答えたので、ここに私が必要とするすべてがあります:
他の列を同じコンテキストに保持し、グループ化された複製の最初の行のみを返すために、 Let-Keywordが必要でした。このようCopyToDataTable
にして、重複した行から DataTable を作成するために使用できます。
複数の列の重複を見つけて、それらの DataTable を作成するために、全体でわずか数行のコード (元のテーブルの行を見つけるために 2 番目のクエリを保存できます)。