質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

864閲覧

linq to sql VB→C#への変換

soma62jp

総合スコア141

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/01/23 01:50

編集2020/01/23 02:59

現在、VB.NETから、C#に変換作業を行っています。

下記のコードをC#に変換したいのですが、具体的なコードをご教示頂ければ幸いです。

Dim result = From u In context.Users Join contact In context.Emergency_contacts On u.user_id Equals contact.user_id Join user_name In context.User_names On u.user_id Equals user_name.user_id Group Join depart_user In context.User_Departments On u.user_id Equals depart_user.user_id Into deptab = Group From departGroup In deptab.DefaultIfEmpty() Where departGroup Is Nothing Order By u.user_code Select New UserCsvEntity() With { .user_id = u.user_id, .user_id_hash = u.user_id_hash, .user_code = u.user_code, .mail_address = u.mail_address, .shimei = user_name.shimei, .kana_shimei = user_name.kana_shimei, .kana_tsusho = user_name.kana_tsusho, .tsusho = user_name.tsusho, .mail_address1 = contact.mail_address1, .mail_address2 = contact.mail_address2, .mail_address3 = contact.mail_address3, .tel_no1 = contact.tel_no1, .tel_no2 = contact.tel_no2, .tel_no3 = contact.tel_no3, .dept_admin = If(listCerId.Contains(u.user_id), "1", ""), .system_admin = If(listSysAdId.Contains(u.user_id), "1", ""), .dept_cd = "" }

[試したこと]
SharpDevelopで変換→正常に変換できず

下記のコードを実行したが、「'join' は無効です。」のエラーが出ました。

var result = from u in context.Users join contact in context.Emergency_contacts on u.user_id equals contact.user_id join user_name in context.User_names on u.user_id equals user_name.user_id group join depart_user in context.User_Departments on u.user_id equals depart_user.user_id into deptab = group from departGroup in deptab.DefaultIfEmpty() where departGroup is null order by u.user_code select new UserCsvEntity { user_id = u.user_id, user_id_hash = u.user_id_hash, user_code = u.user_code, mail_address = u.mail_address, shimei = user_name.shimei, kana_shimei = user_name.kana_shimei, kana_tsusho = user_name.kana_tsusho, tsusho = user_name.tsusho, mail_address1 = contact.mail_address1, mail_address2 = contact.mail_address2, mail_address3 = contact.mail_address3, tel_no1 = contact.tel_no1, tel_no2 = contact.tel_no2, tel_no3 = contact.tel_no3, dept_admin = listCerId.Contains(u.user_id) ? "1" : "", system_admin = listSysAdId.Contains(u.user_id) ? "1" : "", dept_cd = "" };

[環境]
Visual Studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/01/23 03:19

group join というのは無いはずです。 メソッド構文 GroupJoin を使うのが良いと思います。
soma62jp

2020/01/23 03:25

可能であれば、クエリ構文で対応したいと思っております。 C#で同等の構文はないのでしょうか?
soma62jp

2020/01/23 04:13

上記のリンクの参照提示、ありがとうございました。 メソッド構文で検討したいと思います。
退会済みユーザー

退会済みユーザー

2020/01/23 05:55

何をしたいのか分からないので依然として自分はギブアップには変わりはないのですが・・・ もし、左外部結合をしたいということなら C# の Linq のクエリ式ならば以下の記事に例があります。 左外部結合の実行 https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/perform-left-outer-joins ご参考まで。
guest

回答2

0

ベストアンサー

From とか New とかその他キーワードの大文字を小文字に直して、Nothing を null に変えて、UserCsvEntity() With { ... の With を削除して、{ ... } の中の式全部の左辺のピリオドを削除(例: .user_id = u.user_id, ⇒ user_id = u.user_id,)してみたらどうなりますか?

投稿2020/01/23 02:09

編集2020/01/23 04:40
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

soma62jp

2020/01/23 02:34 編集

下記のコードで試してみましたが、そのまま置き換えるだけではgroup joinの部分でエラーになります。 ```ここに言語を入力 var result = from u in context.Users join contact in context.Emergency_contacts on u.user_id equals contact.user_id join user_name in context.User_names on u.user_id equals user_name.user_id group join depart_user in context.User_Departments on u.user_id equals depart_user.user_id into deptab = group from departGroup in deptab.DefaultIfEmpty() where departGroup is null order by u.user_code select new UserCsvEntity { user_id = u.user_id, user_id_hash = u.user_id_hash, user_code = u.user_code, mail_address = u.mail_address, shimei = user_name.shimei, kana_shimei = user_name.kana_shimei, kana_tsusho = user_name.kana_tsusho, tsusho = user_name.tsusho, mail_address1 = contact.mail_address1, mail_address2 = contact.mail_address2, mail_address3 = contact.mail_address3, tel_no1 = contact.tel_no1, tel_no2 = contact.tel_no2, tel_no3 = contact.tel_no3, dept_admin = listCerId.Contains(u.user_id) ? "1" : "", system_admin = listSysAdId.Contains(u.user_id) ? "1" : "", dept_cd = "" }; ```
退会済みユーザー

退会済みユーザー

2020/01/23 02:46 編集

自分はギブアップです。他の方の回答をお待ちください。 上記のコードと結果を質問欄を編集して「試したこと」に追記するともに、どういうエラーになったのかエラーメッセージを書いてもらった方が回答が集まりやすいと思います。
退会済みユーザー

退会済みユーザー

2020/01/23 07:30

質問のコメント欄に書いたことがお役に立ったようですので、以下に転記しておきます。 何をしたいのか分からないので依然として自分はギブアップには変わりはないのですが・・・ もし、左外部結合をしたいということなら C# の Linq のクエリ式ならば以下の記事に例があります。 左外部結合の実行 https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/perform-left-outer-joins ご参考まで。
guest

0

下記のコードでC#で左外部結合ができました。

SurferOnWwwさんの提示して頂いた下記サイトで、実行できることを確認できました。

左外部結合の実行
リンク内容

var result = from u in context.Users join contact in context.Emergency_contacts on u.user_id equals contact.user_id join user_name in context.User_names on u.user_id equals user_name.user_id join depart_user in context.User_Departments on u.user_id equals depart_user.user_id into deptab from departGroup in deptab.DefaultIfEmpty() where departGroup == null orderby u.user_code select new UserCsvEntity { user_id = u.user_id, user_id_hash = u.user_id_hash, user_code = u.user_code, mail_address = u.mail_address, shimei = user_name.shimei, kana_shimei = user_name.kana_shimei, kana_tsusho = user_name.kana_tsusho, tsusho = user_name.tsusho, mail_address1 = contact.mail_address1, mail_address2 = contact.mail_address2, mail_address3 = contact.mail_address3, tel_no1 = contact.tel_no1, tel_no2 = contact.tel_no2, tel_no3 = contact.tel_no3, dept_admin = listCerId.Contains(u.user_id) ? "1" : "", system_admin = listSysAdId.Contains(u.user_id) ? "1" : "", dept_cd = "" };

投稿2020/01/23 06:48

編集2020/01/23 06:51
soma62jp

総合スコア141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問