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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

解決済

AddRangeに関するエラーメッセージの解決方法について

DinKa
DinKa

総合スコア39

Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

4回答

1評価

0クリップ

5803閲覧

投稿2016/03/09 02:37

編集2016/03/11 00:02

前回の質問ではお世話になりました。
C#歴半年&MVC勉強したてですが、質問させていただきます。
今回はエラーメッセージの解決方法がわからず、質問させていただきたいと思います。

###前提・実現したいこと
C#(ASP.NET Framework4.5.1 MVC)で履歴をExcel帳票出力するウェブアプリケーションを作っています。
コレクションに対してAddRangeを実装したいのですがうまく動きません。

###発生している問題・エラーメッセージ
エラー 1 'System.Linq.IOrderedQueryable<A.Models.TEAM_HIS>' に 'AddRange' の定義が含まれておらず、型 'System.Linq.IOrderedQueryable<A.Models.TEAM_HIS>' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています

###ソースコード

C#

namespace A.Models { using System; using System.Data.Entity; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; public partial class DefaultContext : DbContext { public DefaultContext() : base("name=DefaultContext") { } /// <summary> /// プロジェクト経歴 /// </summary> public virtual DbSet<TEAM_HIS> TEAM_HIS { get; set; } /// <summary> /// 変更履歴 /// </summary> public virtual DbSet<CHANGE_HIS> CHANGE_HIS { get; set; } } } namespace A.Models { using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; public partial class TEAM_HIS { [Key] [Column(Order = 0)] [StringLength(10)] [DisplayName("team名")] public string team { get; set; } [Key] [Column(Order = 1)] [StringLength(10)] [DisplayName("プロジェクト")] public string project { get; set; } [Key] [Column(Order = 2)] [DisplayName("開始日時")] public DateTime start { get; set; } [Key] [Column(Order = 3)] [DisplayName("終了日時")] public DateTime end { get; set; } } } using System; using System.Collections.Generic; using System.Linq; using System.text; using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using System.Data.Entity; using A.Models; namespace A.Report.History { /// <summary> /// 個人履歴(Excel)出力 /// </summary> public class HistoryGenerator : BaseReportGenerator { /// <summary> /// コンストラクタ /// </summary> public ReportGeneratorService(DbSet dbcontext) : base(dbcontext) {} public void Set() { DateTime start = new DateTime(1900, 1, 1); DateTime next = new DateTime(1900, 1, 1); int i_c = 1; // 対象を設定します(今回は仮にAAAとします) var target = (from t in DbContext.CHANGE_HIS where t.name == "AAA" orderby t.date ascending select t).FirstOrDefault(); // CHANGE_HISの異動数を取得します var m_c = (from m DbContext.CHANGE_HIS where m.name == target.name && m.eve != "out" select m).Count(); // outした対象のdateを取得します var loss = (from l in DbContext.CHANGE_HIS where l.name = target.name && l.eve = "out" orderby l.date ascending select l.date).FirstOrDefault(); // 履歴のコレクションで対象に異動がない場合の宣言 var col = from c in DbContext.TEAM_HIS where c.team == target.team orderby c.date, c.team ascending select c; // 一度データを消します col = null; // 履歴のコレクションを作成 foreach (var forlist in DbContext.TEAM_HIS) { start = (from s in DbContext.CHANGE_HIS where s.team = forlist.team && s.date >= start orderby s.date, no ascending select s.date).FirstOrDefault(); if (m_c >= i_c) { next = (from n in DbContext.CHANGE_HIS where n.team == forlist.team && n.date >= start orderby n.date, n.team ascending select n.date).FirstOrDefault(); }else{ next = DateTime.Now; } // TEAM毎の個人履歴をセット var addcol = from a in DbContext.TEAM_HIS where a.team == forlist.team && a.start < next && a.start >= start && a.start < loss orderby a.start ascending select a; // 個人履歴に追加 addcol.AddRange(col); ++i_c; foreach (var his in col) { var hist = new History(target); hist.Name = target.name; hist.Team = his.team; hist.Project = his.project; hist.Start = his.start; hist.End = his.end; target.Histories.Add(hist); } target.ColStartPos = cols; cols += target.OutputWidth() + 1; } } } }

###補足情報
TEAM_HISというプロジェクトの履歴を管理しているテーブルから、CHANGE_HISという個人の異動経歴を管理しているテーブルを結合させて、個人ごとのproject履歴を表示したExcelを出力したいというのが、実現したい機能です。
ソースはその一部を表示させています。

注意しなくてはいけないのは、対象者(name)が、TEAMを移ることがあること、TEAMに所属している間にlossする(管理対象外になる)ことがあること。

以上を考慮したところ、対象者があるTEAMに所属していた期間、start, nextで取得し、その期間のproject履歴を抽出する。そして、それを異動回数(CHANGE_HISのレコード数-1)だけ繰り返し、コレクションに追加していく。ただし、CHANGE_HISのレコードにoutが出てきたら、その日付までとする。
このような観点でプログラムを作成しています。

ところが、AddRangeを使用すると、表記のエラーが出てしまい解決できませんでした。
エラー自体の意味が理解できていなく、可能でありましたらエラーの意味と解決方法を教えていただけますでしょうか。
よろしくお願いいたします。

###補足2
AddRangeをどう利用したいかですが、

C#

// 1回目(本当はこれはaddcolではなく、colの形が望ましい) addcol = { {T1, P01, 2013-5-1, 2013-8-10}, {T1, P02, 2013-8-21, 2013-12-20}, {T1, P03, 2014-1-11, 2014-3-30} }; // 2回目(addcolは毎回上書きする) addcol = { {T2, P01, 2014-5-1, 2014-8-10}, {T2, P08, 2014-8-21, 2015-3-30} }; // 3回目 addcol = { {T3, P09, 2015-4-11, 2015-12-30} }; // 合算後(addcolを3回目まで足しこむ) col = { {T1, P01, 2013-5-1, 2013-8-10}, {T1, P02, 2013-8-21, 2013-12-20}, {T1, P03, 2014-1-11, 2014-3-30}, {T2, P04, 2014-5-1, 2014-8-10}, {T2, P08, 2014-8-21, 2015-3-30}, {T3, P09, 2015-4-11, 2015-12-30} };

上記のような2次元配列を足しこんでいくようにしていきたいです。

※2つのテーブルと出力結果をアップローダーにあげておきます。
リンク内容

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

pinnkoro

2016/03/09 05:49 編集

2点だけ質問を。 1.「AddRangeを実装したい」というのはTEAM_HISクラスにAddRangeメソッドを新しく作成したいということでしょうか?それともaddcolの後ろに要素をくっつけるようなListでいうAddRangeと同じ処理をさせたいのか。 2.DbSet の定義が書かれていないので分からないのですが、DbContext.TEAM_HISはどういう定義をされていますか?Listで書かれていますか?
DinKa

2016/03/09 06:09

質問ありがとうございます 1.はい、後者です。おぼろげながら自分が勘違いしているのがわかったのですが、AddRangeメソッドはコレクションにコレクションを加えることはできないのでしょうか? ○リストA.AddRange(コレクションB) ×コレクションA.AddRange(コレクションB) もしそうであれば、コレクションにコレクションを加えるような処理を実装するか、あるいは設計しなおすかになるかと思います。 2.DbSetの定義については、ご指摘いただいたTEAM_HISを本文に加えてみます。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。