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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

1回答

1705閲覧

linqを使った外部結合の結果がうまく出力されない

ore_cafe

総合スコア2

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

1クリップ

投稿2020/09/17 07:01

二つのlistを左外部結合し、集計結果を出力したいのですが、うまくできておりません。どこを訂正すれば望む結果を得られるでしょうか?
userクラスは人の情報、projectクラスは人が関わったプロジェクトの情報があり、where句の条件の通りに指定したプロジェクト開始月、人のIDに一致するデータがとれる想定だったのですが、条件に合致するデータがあるにもかかわらず何も取得できておりません。

public class User { public int m_id; public string m_name public User(int id,string name) { this.m_id = id; this.m_name = name; } public User() { } public int GetID() { return m_id; } public string GetName() { return m_name; } }
public class Project { public m_userID; public DateTime m_yearMonth;//プロジェクトがいつ始まったか public int m_year; public int m_month; public Detail() { } public Detail(int userID, DateTime yearMonth, int year, int month) { this.m_userID = userID; this.m_yearMonth = yearMonth; this.m_year = year; this.m_month = month; } public int GetUserID() { return m_userID; } public DateTime GetyearMonth() { return m_yearMonth; } public int GetYear() { return m_yearMonth.Year; } public int GetMonth() { return m_yearMonth.Month; } }
List<User> m_user { get; set; } List<Company> m_project { get; set; } var Joint = m_user.GroupJoin(m_projectt, u => u.m_id, d => d.m_userID, (m, d) => new { Name = m._name              ID = m.m_id, Year = d.Any() ? d.FirstOrDefault().m_year : 0, Month = d.Any() ? d.FirstOrDefault().m_month : 0, } ) .Where(x => x.Year == 2020 && x.ID == 1) .GroupBy(x => x.Month) .Select(x => new { m_month = x.Key}); foreach (var group in Joint) { //listに下の項目を追加          { l_Name = group.m_name,l_Month = group.m_month}); }

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

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

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

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

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

kikukiku

2020/09/17 07:55

入力データがどんなもので、出力として得たいデータがどんなもので、 どこが意図したデータと違うのかを、記述しないと回答できないと思います。
kikukiku

2020/09/17 08:15

そもそもこのソースエラーになるんじゃないのかなー。
退会済みユーザー

退会済みユーザー

2020/09/17 08:20

クラス定義の仕方とか、Linq の書き方とか、なんかいろいろ特徴的ですけど、ひょっとして、 https://teratail.com/questions/291974 のスレッドの質問者さんと同一人物ですか?
退会済みユーザー

退会済みユーザー

2020/09/18 01:23

質問者さん、最初の投稿以来無言ですが、多々コメントがされていますのでそれらに対するフィードバックを返してください。無言は NG です。それと並行してコードを見直してください。メチャクチャという感じで、コンパイラも通らないのでは?
guest

回答1

0

回答になっておらず、申し訳ございません。
LINQの結合は、なかなか難しく保守性も悪くなると個人的に思っています。
仕事でも、DB側にVIEWを作成し、結合や複雑なSQLはDB側に実装しています。
そうすると、LINQ側はシンプルに作れます。

ご参考になればと思います。

投稿2020/09/19 13:21

Kaiser

総合スコア295

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問