問題タブ [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.
c# - 複数のテーブルをデータセットに変換
私の質問は非常に単純に思えますが、私にとっては退屈になりました。私のプロジェクトには、データ アクセス レイヤーとして機能する DBML ファイルがあります。既存の結果をデータセットに変換するユーティリティ メソッドがもう 1 つあります。以下は私の方法です:
現在、ストアド プロシージャの 1 つに 3 つの異なる Select クエリが実行されているため、そこから 3 つのテーブルが返されます。コードビハインドで結果を返し、結果をすばやく見ると、3 つのうちの 1 つだけのテーブルが表示されます。
可能な解決策は何でしょう。私を助けてください。上記のLOCに問題がある可能性があると思います。
SQL クエリが更新されました
ストアド プロシージャを呼び出すメソッド
DBML FILE メソッド
c# - 複数のテーブルを結合し、LINQ の DataRow で出力を取得する
こんにちは、
複数のテーブルに参加し、DataRow (クエリによって返されるすべての行) で出力を取得するシナリオがあります。
SQL クエリ:
LINQ で結合を実行する方法は知っていますが、LINQ の select ステートメントですべての列 (行) を選択するにはどうすればよいですか。
.net - LinQ で (型指定された) データセットに参加するには?
私は最近 VS 2005 を 2010 にアップグレードしましたが、LinQ は初めてです。多分誰かが私を正しい方法で配置することができます.
背景: 型指定されたデータセットがあり、Table AccessRule で拡張された標準の SQLMembershipProvider があります。そのため、役割は無限に AccessRules を持つことができます (fe "Administrator" には "DeleteCustomer" があります)。SqlMemberShipProvider から継承し、オーバーロードされた関数 hasAccess を持つカスタム メンバーシップ プロバイダーを使用します (1 つはパラメーターとしてメモリ データセットを持ち、もう 1 つはデータベースを直接使用します)。
これは完全なモデルです:
ここで、UserID='89f9ea8d-8ae1-460b-a430-aa433261feec'
を持つユーザーに AccessRule "DeleteCustomer" があるかどうかを知る必要があります。
SQL では、次のようになります。
要するに:
LinQ を使用してからaspnet_UsersInRoles
に到達するにはどうすればよいですか?aspnet_AccessRule
前もって感謝します...
編集:
C# も大歓迎ですが、私は VB.Net を好みます。
これは私が持っているものですが、機能しません。
"Definition of method SelectMany is not accessible in this context"
コンパイラの警告が表示され、2 番目の警告From
が強調表示されます。aspnet_RoleAccessRule と aspnet_UsersInRoles の複合キーと関係があると思います。助言がありますか?
これにより、最初のコンマで同じ例外が発生します。
これは結合構文ですが、同様のエラーがあります(Join
コンテキストではアクセスできません..):
解決策: Namespace をインポートするのを忘れていましたSystem.LinQ
。これらのクエリはすべて機能しています。
補足: Join-Syntax は群を抜いて最速のクエリです。私のフォローアップの質問を見てください:なぜ LINQ JOIN は WHERE とリンクするよりもずっと速いのですか?
.net - LINQ JOIN が WHERE でリンクするよりもはるかに高速なのはなぜですか?
私は最近 VS 2010 にアップグレードし、LINQ to Dataset で遊んでいます。ASP.NET WebApplication の HttpCache にある Authorization 用の厳密に型指定されたデータセットがあります。
だから私は、ユーザーが何かをする権限があるかどうかを実際に確認する最も速い方法は何かを知りたいと思っていました. これが私のデータモデルと、誰かが興味を持っている場合のその他の情報です。
私は3つの方法をチェックしました:
- 直接データベース
- Where条件を「結合」として使用する LINQ クエリ- 構文
- Joinを使用した LINQ クエリ- 構文
これらは、各関数で 1000 回の呼び出しを行った結果です。
1.反復:
- 4,2841519秒
- 115,7796925秒
- 2,024749秒
2.反復:
- 3,1954857秒
- 84,97047秒
- 1,5783397秒
3.反復:
- 2,7922143秒
- 97,8713267秒
- 1,8432163秒
平均:
- データベース: 3,4239506333 秒
- 場所: 99,5404964 秒。
- 結合: 1,815435 秒。
Join-version が where-syntax よりもはるかに高速であるため、LINQ の初心者としては最も読みやすいように見えますが、なぜ役に立たないのでしょうか。または、クエリで何かを見逃していますか?
LINQ クエリは次のとおりです。データベースはスキップします。
どこで:
加入:
前もって感謝します。
編集:より意味のあるパフォーマンス値を取得するために両方のクエリをいくつか改善した後、JOINの利点は以前よりも何倍も大きくなっています。
参加:
どこで:
1000 回の呼び出しの結果 (より高速なコンピューターで)
- 参加 | 2.どこで
1.反復:
- 0,0713669秒
- 12,7395299秒
2.反復:
- 0,0492458秒
- 12,3885925秒
3.反復:
- 0,0501982秒
- 13,3474216秒
平均:
- 結合: 0,0569367 秒。
- ここで: 12,8251813 秒。
Join は 225 倍高速です
結論: WHERE を使用してリレーションを指定することは避け、可能な限り JOIN を使用します ( LINQ to DataSetおよびLinq-To-Objects
一般的には間違いなく)。
.net - LINQ to DataSet - 結合と GridView の問題
結合する必要がある 3 つの DataTables があり、結合されたデータを GridView の DataSource として使用します。最初の ( localSQLTable
) は、MS-SQL データベースに対するクエリによって入力されます。2 番目の 2 つ (serviceResponse.Tables(0)
と) は、Web サービスの結果をserviceResponse.Tables(1)
使用して構築されます。DataSet.ReadXML
私はここまで来ました:
ただし、これjoinedData
は単なる IEnumerable (匿名型) のようです。以下を含むいくつかのことを試しました。
joinedData
新しいDataRowを構築するためにラムダ関数(私はまったく慣れていません)を使用してIEnumerable(Of DataRow)として構築しようとしています- 結果セットで
.ToList()
or (型をいじった後) を呼び出す.AsEnumerable()
主な問題は、私が何をしようとしても、結果を GridView の DataSource として使用すると何か問題があるということです - 私は2つの例外のうちの1つを得ました:
- ID を持つ GridView のデータ ソースには、列を生成するためのプロパティまたは属性がありませんでした。データ ソースにコンテンツがあることを確認します。
- データ ソースは、サーバー側のデータ ページングをサポートしていません。
.Item ("Field")
また、Linq クエリで厳密に型指定されたものの代わりに使用するべきではないこともわかってい.Field (Of T)("Field")
ます。データが実際に使用可能になるまで、その変更を待っていました。
私はLinqと結婚していません。より適切な場合DataSet.Merge
(または他の方法論)、私はそれを楽しませます。また、後で別の 2 つの DataTables に実際に結合する必要があるという明確な可能性もあります。その場合は、serviceResponse
テーブルを 1 つにマージする可能性が高いため、結合するテーブルは 3 つだけです。
では、このデータを結合し、結果を GridView の DataSource として使用するにはどうすればよいでしょうか? また、元の DataTable ( localSQLTable
) に 2 つの余分な列を追加し、XML 応答データを使用して行ごとに入力するよりも、私が行っていることは速くなるでしょうか?
c# - C#で使用するためにデータベースからさまざまなプロジェクションを作成するためのベストプラクティス
したがって、私の問題は、データベースに相互に関連するテーブルがたくさんあることです。さて、ユーザーが望むものに応じて、私はそれらから異なる投影を作成する必要があります。
10個のテーブルがあり、6つの異なるプロジェクションが必要だとします。これらのプロジェクションは、私が使用するビューコンポーネントのデータソースとして直接使用されます。基本的に、これまで私はこれを達成するための2つの方法を考え出しました。
1)必要なすべての異なるテーブルを含むデザイナを使用してDataSetを作成します。次に、Linq2DataSetを使用してプロジェクションを作成し、結果をビューコンポーネントに渡します。
2)プロジェクションごとに1つずつ、合計6つのカスタムTableAdapterを含むDataSetを作成し、データテーブルにそれらを入力して、テーブルをビューコンポーネントに渡します。
ソリューション1の場合、明らかに柔軟性が高く、そこから新しいプロジェクションをより簡単に作成できます。ただし、データ量が多くなると問題になる可能性があります。
ソリューション2の場合、軽量ですが、変更を加えるのは非常に困難です。すぐに多くの変更が行われるとは思っていませんが、柔軟性は常に優れています。
では、これらのソリューションのどれが優れているでしょうか。また、他のより優れたソリューションも利用できますか?
編集:いくつかのコンテキストを追加する
そこで、使用しているデータの種類の例を挙げようと思いました。基本的に、結果を含むテーブルがあります。結果にはタイプがあり、1つ以上の関係を持つことができます。これらは、たとえば、trackID、routeID、countryIDとして定義されます。
ここで、結果のタイプに応じて、1つ以上のリレーションをフェッチする必要があります。これらの例としては、トラックの平均速度の結果タイプがあります。これは、3つすべてに関係している可能性があります。つまり、前述のすべてのテーブルを結合したいと思います。もう1つの例は、トラックの配達数の結果タイプであり、ルートや国と関係がある可能性があります。未使用の関係は常に0またはnullです。
また、これらのケースはさらにシナリオに分けられます。これは、指定されたシナリオのみを考慮して、表示されるデータをフェッチするクエリを変更できる必要があることを意味します。
だから私の問題は、このすべてのデータをどのように読み取って適切に使用するかです。SQLビューが1つのオプションになると思います。私はデータベースアクセスにまったく慣れていないので、どんな助けでもありがたいです。
.net - LINQ-null許容列のテーブルを結合する
null許容列のテーブルを結合する方法は?
次のLINQクエリがあります。NULLにRMA.fiCharge
することができます。
「DBNull型から「整数」型への変換は無効です」というメッセージが表示されますquery.ToArray()
。
だから私WHERE RMA.fiCharge IS NOT NULL
はクエリにを追加することができます。しかし、LINQでそれを行う方法はありますか、それとも別のオプションがありますか?
前もって感謝します。
解決:
問題は、DataSetがNullable-Typesをサポートしていないが、整数列でNULL値をクエリするとInvalidCastExceptionを生成することでした(Martinhoに感謝)。dahlbykからの変更されたLINQクエリは、ほとんど変更を加えずに機能します。DataSetは、AllowDbNull = True(この場合)のすべての列に対してブールプロパティを生成しますIsfiChargeNull
。
c# - 多数の MIN 関数を 1 つの LINQ to DataSet クエリにコーディングする方法
わかりました、私は支援を求める前にしばらくこれに取り組んできました。要求されたデータを配信するために互いに続く4つのOracleベースのSQLクエリがあります。私は .NET で作業していますが、LINQ to DataSet を使用して最初のクエリを 2 番目のクエリに渡し、それが 3 番目に渡され、最後に 4 番目に渡されると思います。私が頭を悩ませているのは、最初から2番目に渡すときです。通常の ODP.NET および C# クエリを使用して、最初のクエリを DataSet に取得できます。
ステップ2はこちら
これを独自の DataSet に取り込む LINQ to DataSet を作成しようとしています。これは私がこれまでに持っているものであり、私は道から外れていることを知っています
min 以外のすべてのフィールドと、簡潔にするために含まれているフィールドは省略しました。それで、私の質問は、SELECT ステートメントに含まれるものを含む LINQ to DataSet クエリを作成できるかということです。そうでない場合、これらすべてを PL/SQL 関数で開発し、アプリケーションからストアド プロシージャとして呼び出す必要がありますか?
ご協力いただきありがとうございます。
T.
迅速なフィードバックに基づいて、最初のクエリは次のとおりです。
c# - LINQ と型指定されたデータセットと型指定されていないデータセットでのパフォーマンス?
LINQ のパフォーマンスを、型指定されたデータセットと型指定されていないデータセットと比較して測定する機会がありましたか?
これら 2 つの内部実装の違いは何ですか。LINQ-to-SQL は式ツリーを使用して LINQ から SQL を生成することを知っていますか? 型指定されていないデータセットを使用する LINQ に似たものはありますか?
これはすでに尋ねられた質問のように思えるかもしれませんが、私が見つけようとしているのは、たとえば、LINQ で厳密に型指定されたデータセットの代わりに型指定されていないデータセットを使用する、またはその逆であるという数字があるかどうかです。
linq - NULL 値に対して LINQ クエリが失敗する
LINQ クエリで middleName と Phone の null 値を含むすべての行を取得する方法はありますか?