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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

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

LINQ

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

Q&A

解決済

3回答

480閲覧

オブジェクトに紐づくオブジェクトを取得したい。

s.kun

総合スコア11

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

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

LINQ

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

0グッド

0クリップ

投稿2018/05/24 09:15

User Model

C#

1 public class User 2 { 3 public String Id { get; set; } 4 public String Name { get; set; } 5 }

Work Model

C#

1 public class Work 2 { 3 public Guid Id { get; set; } 4 public String UserId { get; set; } 5 public User User { get; set; } 6 public DateTime StartedAt { get; set; } 7 public DateTime FinishedAt { get; set; } 8 }

Project Model

C#

1 public class Project 2 { 3 public String Id { get; set; } 4 public String Name { get; set; } 5 public Decimal Amount { get; set; } 6 public IEnumerable<Work> Works { get; set; } 7 }

RepositoryContext

C#

1using Microsoft.EntityFrameworkCore; 2 3 public class RepositoryContext: DbContext 4 { 5 public RepositoryContext(DbContextOptions options) 6 :base(options) 7 { 8 } 9 public DbSet<User> Users { get; set; } 10 public DbSet<Project> Projects { get; set; } 11 public DbSet<Work> Works { get; set; } 12 }

ProjectのIdを指定して紐づくWorkを取得するメソッド

C#

1 public Project GetDetailsOfProject(String projectId) 2 { 3 return new Project(GetProjectById(projectId)) 4 { 5 Works = RepositoryContext.Works 6 .Where(work => work.ProjectId == projectId) 7 .OrderByDescending(work => work.StartedAt) 8 }; 9 }

やりたいこと

上記のメソッドで、Projectに紐づくWorkに紐づくUserを取得したいです。

出来ている事

Projectに紐づくWorkの取得までは出来ています。

やってみた事

申し訳ありません。思いつきませんでした。

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

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

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

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

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

hihijiji

2018/05/24 09:46

Core1.0 と2.0でちょっと違ったと思います。 Entity Framework のバージョンは重要です。それ以外でも書きすぎってことはないので全てのバージョンは明記してください。
s.kun

2018/05/24 09:50

Microsoft.EntityFrameworkCore (2.0.3)です。情報としてはこれで足りますでしょうか?
guest

回答3

0

自己解決

GetDetailsOfProjectで取得したProjectオブジェクトのworkをforeachで回して対処しました。
ご回答頂いた皆様、ありがとうございました。

投稿2018/05/30 09:47

s.kun

総合スコア11

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

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

0

試していないのですが、以前読んだこの記事が参考になると思います。
Entity Framework Code First でのリレーションシップ

投稿2018/05/24 12:15

編集2018/05/24 12:16
gaya-K

総合スコア449

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

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

0

RepositoryContext.Project.SelectMany(n=> n.Works).Select(n=> n.User)

LINQならこれでいいはず。Entity Frameworkは、しばらく使っていないのでわかりません。

投稿2018/05/24 09:31

kiichi54321

総合スコア1984

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

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

x_x

2018/05/24 09:50

Projectsですかねー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問