[解決済み】LINQで1回の結合で複数フィールドの結合を行う方法
質問
LINQ2DataSetクエリで、複数のフィールドを結合する必要があります(たとえば
var result = from x in entity
join y in entity2
on x.field1 = y.field1
and
x.field2 = y.field2
私はまだ適切な解決策を見つけていません(Where句に追加の制約を追加することはできますが、これは適切な解決策とは程遠いものです。 これ のソリューションがありますが、これはequijoinを想定しています)。
LINQでは、1回の結合で複数のフィールドに結合することは可能ですか?
EDIT
var result = from x in entity
join y in entity2
on new { x.field1, x.field2 } equals new { y.field1, y.field2 }
は、上記でequijoinを前提とした解として参照したものです。
さらに EDIT
私の最初の例がequijoinであったという批判に答えるために、私はそれを認めます、私の現在の要件はequijoinであり、私はすでに上で言及したソリューションを採用しました。
しかし、私はLINQでどのような可能性があり、どのようなベストプラクティスを採用すべきかを理解しようとしています。私はすぐにテーブルIDで日付範囲クエリジョインを行う必要があり、ちょうどその問題を先取りしていたところです。
いつもながら、たくさんのご指摘とコメントをありがとうございます。
解決方法は?
匿名型を使った解決策で問題ないでしょう。LINQ できる のみ(join句で)表現することができ、実際、元のクエリで表現したいのはこれでした。
もし、何か特別な理由で匿名型を使ったバージョンが気に入らないのであれば、その理由を説明すべきです。
最初に依頼したこと以外のことをしたい場合は、その例を挙げてください。 本当に を行いたい。
はい、quot;日付範囲結合を行うには、代わりにwhere句を使用する必要があります。この2つは意味的には同じなので、利用できる最適化の問題に過ぎません。LINQ to ObjectsにはLINQ to DataSetsも含まれます)Equijoinでは、内部シーケンスに基づくルックアップを作成し、キーとそのキーにマッチするエントリのシーケンスをハッシュテーブルとして考えて、簡単な最適化が行われます。
日付の範囲でそれを行うのは、やや困難です。しかし、あなたがquot;日付範囲結合で何を意味しているかによりますが、次のようなことができるかもしれません。
同様
- もし、同じ年に発生した(しかし同じ日付ではない)2つのエントリーが一致するように、日付のバンド(例えば年ごとに1つ)を作成することを計画しているなら、そのバンドをキーとして使用することで実現可能でしょう。もっと複雑な場合、たとえば結合の一方が範囲を指定し、もう一方が単一の日付を指定してその範囲に含まれる場合にマッチングさせるような場合、これは
where
節(2つ目の
from
節) IMOです。マッチをより効率的に見つけるために、片側またはもう片側を順番に並べるという特にファンキーなマジックもできますが、それは大変な作業です - 私はパフォーマンスが問題であるかどうかをチェックした後にのみそのようなことをします。
関連
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] PostgreSQLで更新+結合を行うには?
-
[解決済み] LINQとLambdaでJoin/Whereを実現する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である