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

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

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

LINQ to Entitiesは、言語統合クエリであるLINQをEDMに行う機能を指します。C#/VBといった言語に統合されており、Visual StudioのIntelliSense機能を始めとするコーディングの様々なサポートを受けることが可能です。

C#

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

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

Visual Studio

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

LINQ

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

Q&A

解決済

1回答

2981閲覧

LINQクエリ SQLでInsert文の例文が欲しいです。

dendenmushi

総合スコア98

LINQ to Entities

LINQ to Entitiesは、言語統合クエリであるLINQをEDMに行う機能を指します。C#/VBといった言語に統合されており、Visual StudioのIntelliSense機能を始めとするコーディングの様々なサポートを受けることが可能です。

C#

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

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

Visual Studio

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

LINQ

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

1グッド

0クリップ

投稿2018/01/29 23:47

編集2018/01/30 15:10

###行いたいこと
LINQクエリでINSERT文を記述してWebApiを作りたい。
###環境
Microsoft Visual Studio 2017 Xamarin
ASP.NET
Entities Flamework?

###記述できている参考コード
microsoftのASP.NET WebApiについて以下の動画説明がありまして、LINQのSELECT文を記述していました。
https://channel9.msdn.com/Events/de-code/decode-2015/DEV-011

C#

1namespace Decode2017iq155WebApi.Controllers.thingB 2{ 3 [Route("thingB/ListAuthors/{Action}")] 4 public class ListAuthorsWebApiController : ApiController 5 { 6 [HttpGet] 7 public List<AuthorDTO> GetAllAuthors() 8 { 9 using (pubsEntities pubs = new pubsEntities()) 10 { 11 var query = from a in pubs.authors 12 select new AuthorDTO 13 { 14 AuthorID = (int)a.au_id, 15 AuthorName = a.au_fname + " " + a.au_lname 16 }; 17 return query.ToList(); 18 19 } 20 } 21 } 22}

authorsテーブル

AuthorIDFnameLname

このテーブルにINSERTするにはどのような記述をしていけばいいのでしょうか。

###試したこと(その1:Routeクラス追加しinsert文をそのまま記述)

[Route("thingB/ListAuthors/{Action}/{parameter}/")] public class CommentsWebApiController2 : ApiController { [HttpGet] public List<AuthorsDTO> PostAuthors(string id, string fname, string lname) { using (pubsEntities pubs = new pubsEntities()) { var query = insert into a in pubs.Authors ( a.AuthorID, a.Fname, a.Lname ) VALUES ( id, fname, lname ); return query.ToList(); } } }

この場合は、INSERTじたいが認識されないようで、VALUEもメソッドとして認識されて宣言していないとエラーが出てしまいました。

次に参考にしたのは以下サイトです。
https://stackoverflow.com/questions/9096767/insert-list-of-objects-with-linq-to-sql
すいません。記述している最中にわけわからなくなってしまい、何か参考になるサイトや例文となるLINQのINSERT文などご存知あればお願い致します。

###試したこと(その2)

C#

1 [HttpGet] 2 public List<AuthorsDTO> PostAuthors(string id, string lname, fname) 3 { 4 IEnumerable<Post> _post = getAllNewPost(); 5 6 using (pubsEntities pubs = new pubsEntities()) 7 { 8 dc.Posts.InsertAllOnSubmit(_post); 9 dc.SubmitChanges(); 10 }; 11 }

###アドバイス後に試したこと

C#

1 [HttpGet] 2 public List<AuthorsDTO> PostAuthors(string idHikisu, string lnameHikisu, string fnameHikisu) 3 { 4 using (pubsEntities pubs = new pubsEntities()) 5 { 6 var blog = new Blog { lname= lnameHikisu,fname = fnameHikisu}; 7 pubs.Blog.Add(blog); 8 pubs.SaveChanges(); 9 10 } 11 12 13 }

この場合、AuthorIDを指定し、そのIDに対して人名を2名追加する場合、いわゆるidをwhereとして指定して追加INSERTしていく場合はどのような記述方法になるのでしょうか。
あとBlogが認識されませんでした。

そもそもASP.NET WebApiの公開で任意にsqlサーバーにクエリ実行できる術はないのでしょうか…。

###解決

C#

1 [HttpGet] 2 public List<AuthorsDTO> PostAuthors(string idHikisu, string lnameHikisu, string fnameHikisu) 3 { 4 pubsEntities pubs = new pubsEntities(); 5 6 AuthorTable dev1 = new AuthorTable{ lname= lnameHikisu, fname = fnameHikisu }; 7 8 pubs.AuthorTables.Add(dev1); 9 10 //変更の反映 11 pubs.SaveChanges(); 12 13 14 }
bochan2👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Xamarin とか HttpClient とか ASP.NET Web API などの話はちょっと置いといて、Linq to Entity で insert はどう実現するかに絞って回答します。

何か参考になるサイトや例文となるLINQのINSERT文などご存知あればお願い致します。

基本的に Linq のクエリでは select しかできません。なので、「試したこと(その1:Routeクラス追加しinsert文をそのまま記述)」は的外れだと思います。

insert, delete, update はコンテキストに対して SaveChanges メソッドを実行することにより実現します。「試したこと(その2)」がそれに近いような感じがします。が、近いというだけで正解のようには見えませんけど。

DB をどうやって作ったのか、EDM をどのように作ったのか詳しくは分かりませんが、参考にされている Microsoft の記事の pdf をざっと眺めた感じでは、Microsoft のサンプルデータベース Pubs から DB First で EDM(.edmx ファイル等)を生成したように見えます。

であれば、DbContext ベースのコンテキストと Pubs の各テーブルを表すエンティティ(クラス)がのコードが自動生成されているはずです。

その理解で合っていれば、コンテキストを初期化し、insert するデータでエンティティを作成し、それをコンテキストに Add して、コンテキストに SaveChanges メソッドを適用するということになるはずです。

詳しくは以下の記事の「Adding a new entity to the context」のセクションを見てください。

Entity Framework Add and Attach and Entity States
https://msdn.microsoft.com/en-US/data/jj592676

投稿2018/01/30 01:14

編集2018/01/30 01:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dendenmushi

2018/01/30 11:53 編集

edmxファイル確かに生成しました。『DbContext ベースのコンテキストと Pubs の各テーブルを表すエンティティ(クラス)がのコードが自動生成されているはず』これはどういう意味なのかまだ把握できていないので、とりあえずものをみてみます。ありがとうございます。サイトの方も早速確認して一度これでやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問