現在、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
group join というのは無いはずです。
メソッド構文 GroupJoin を使うのが良いと思います。
可能であれば、クエリ構文で対応したいと思っております。
C#で同等の構文はないのでしょうか?
クエリ構文はメソッド構文の糖衣構文です。クエリ構文では存在しないのでメソッド構文を使うほかありません。
VB.NET
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/queries/
C#
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/query-keywords
上記のリンクの参照提示、ありがとうございました。
メソッド構文で検討したいと思います。
何をしたいのか分からないので依然として自分はギブアップには変わりはないのですが・・・
もし、左外部結合をしたいということなら C# の Linq のクエリ式ならば以下の記事に例があります。
左外部結合の実行
https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/perform-left-outer-joins
ご参考まで。
回答2件
あなたの回答
tips
プレビュー