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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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パターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

4回答

8073閲覧

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

DinKa

総合スコア40

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パターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

1グッド

0クリップ

投稿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#

1namespace A.Models 2{ 3 using System; 4 using System.Data.Entity; 5 using System.ComponentModel.DataAnnotations.Schema; 6 using System.Linq; 7 8 public partial class DefaultContext : DbContext 9 { 10 public DefaultContext() 11 : base("name=DefaultContext") 12 { 13 } 14 /// <summary> 15 /// プロジェクト経歴 16 /// </summary> 17 public virtual DbSet<TEAM_HIS> TEAM_HIS { get; set; } 18 /// <summary> 19 /// 変更履歴 20 /// </summary> 21 public virtual DbSet<CHANGE_HIS> CHANGE_HIS { get; set; } 22 } 23} 24 25namespace A.Models 26{ 27 using System; 28 using System.Collections.Generic; 29 using System.ComponentModel; 30 using System.ComponentModel.DataAnnotations; 31 using System.ComponentModel.DataAnnotations.Schema; 32 using System.Data.Entity.Spatial; 33 public partial class TEAM_HIS 34 { 35 [Key] 36 [Column(Order = 0)] 37 [StringLength(10)] 38 [DisplayName("team名")] 39 public string team { get; set; } 40 41 [Key] 42 [Column(Order = 1)] 43 [StringLength(10)] 44 [DisplayName("プロジェクト")] 45 public string project { get; set; } 46 47 [Key] 48 [Column(Order = 2)] 49 [DisplayName("開始日時")] 50 public DateTime start { get; set; } 51 52 [Key] 53 [Column(Order = 3)] 54 [DisplayName("終了日時")] 55 public DateTime end { get; set; } 56 } 57} 58 59 60 61using System; 62using System.Collections.Generic; 63using System.Linq; 64using System.text; 65using System.Threading.Tasks; 66using System.Web; 67using System.Web.Mvc; 68using System.Data.Entity; 69using A.Models; 70 71namespace A.Report.History 72{ 73 /// <summary> 74 /// 個人履歴(Excel)出力 75 /// </summary> 76 public class HistoryGenerator : BaseReportGenerator 77 { 78 /// <summary> 79 /// コンストラクタ 80 /// </summary> 81 public ReportGeneratorService(DbSet dbcontext) 82 : base(dbcontext) 83 {} 84 public void Set() 85 { 86 DateTime start = new DateTime(1900, 1, 1); 87 DateTime next = new DateTime(1900, 1, 1); 88 89 int i_c = 1; 90 // 対象を設定します(今回は仮にAAAとします) 91 var target = (from t in DbContext.CHANGE_HIS 92 where t.name == "AAA" 93 orderby t.date ascending 94 select t).FirstOrDefault(); 95 // CHANGE_HISの異動数を取得します 96 var m_c = (from m DbContext.CHANGE_HIS 97 where m.name == target.name 98 && m.eve != "out" 99 select m).Count(); 100 // outした対象のdateを取得します 101 var loss = (from l in DbContext.CHANGE_HIS 102 where l.name = target.name 103 && l.eve = "out" 104 orderby l.date ascending 105 select l.date).FirstOrDefault(); 106 // 履歴のコレクションで対象に異動がない場合の宣言 107 var col = from c in DbContext.TEAM_HIS 108 where c.team == target.team 109 orderby c.date, c.team ascending 110 select c; 111 // 一度データを消します 112 col = null; 113 114 115 // 履歴のコレクションを作成 116 foreach (var forlist in DbContext.TEAM_HIS) 117 { 118 start = (from s in DbContext.CHANGE_HIS 119 where s.team = forlist.team 120 && s.date >= start 121 orderby s.date, no ascending 122 select s.date).FirstOrDefault(); 123 if (m_c >= i_c) 124 { 125 next = (from n in DbContext.CHANGE_HIS 126 where n.team == forlist.team 127 && n.date >= start 128 orderby n.date, n.team ascending 129 select n.date).FirstOrDefault(); 130 }else{ 131 next = DateTime.Now; 132 } 133 134 // TEAM毎の個人履歴をセット 135 var addcol = from a in DbContext.TEAM_HIS 136 where a.team == forlist.team 137 && a.start < next 138 && a.start >= start 139 && a.start < loss 140 orderby a.start ascending 141 select a; 142 // 個人履歴に追加 143 addcol.AddRange(col); 144 ++i_c; 145 146 foreach (var his in col) 147 { 148 var hist = new History(target); 149 hist.Name = target.name; 150 hist.Team = his.team; 151 hist.Project = his.project; 152 hist.Start = his.start; 153 hist.End = his.end; 154 target.Histories.Add(hist); 155 } 156 target.ColStartPos = cols; 157 cols += target.OutputWidth() + 1; 158 } 159 } 160 } 161}

###補足情報
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// 1回目(本当はこれはaddcolではなく、colの形が望ましい) 2addcol = 3{ 4 {T1, P01, 2013-5-1, 2013-8-10}, 5 {T1, P02, 2013-8-21, 2013-12-20}, 6 {T1, P03, 2014-1-11, 2014-3-30} 7}; 8// 2回目(addcolは毎回上書きする) 9addcol = 10{ 11 {T2, P01, 2014-5-1, 2014-8-10}, 12 {T2, P08, 2014-8-21, 2015-3-30} 13}; 14// 3回目 15addcol = 16{ 17 {T3, P09, 2015-4-11, 2015-12-30} 18}; 19// 合算後(addcolを3回目まで足しこむ) 20col = 21{ 22 {T1, P01, 2013-5-1, 2013-8-10}, 23 {T1, P02, 2013-8-21, 2013-12-20}, 24 {T1, P03, 2014-1-11, 2014-3-30}, 25 {T2, P04, 2014-5-1, 2014-8-10}, 26 {T2, P08, 2014-8-21, 2015-3-30}, 27 {T3, P09, 2015-4-11, 2015-12-30} 28}; 29

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

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

misa👍を押しています

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

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

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

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

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

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を本文に加えてみます。
guest

回答4

0

単に各対象(人)ごとに集計を行ってそれをListに突っ込んでおいて

class result { public string Name; public string Team; public string Project; public date Start; public date End; } List<result> results = new List<result>();

それを各対象ごとに横展開すればいいだけじゃないんですか?
→レポート側の処理?

投稿2016/03/09 17:37

dojikko

総合スコア3939

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

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

DinKa

2016/03/10 00:01

回答ありがとうございます。 はい、質問の仕方が悪いのかと思いますが、集計の仕方でAddRangeを使っていて、それのエラー解決ができなかったのが一番の問題点です。 次点として、解決できないなら別なやり方で集計できないかと思ってます。
dojikko

2016/03/10 02:53

AddRangeがダメのならForEachでAddすればいいのでは? というか今のアプローチだとAddもできないとかないですよね?
DinKa

2016/03/10 05:14

はい、残念ながら問題はList<>型でないため、AddRangeやAddは使えないことがわかりました。 この設計だと集計ができないことがわかりましたので、一度設計しなおすことにします。 お付き合いいただきありがとうございました。
guest

0

ベストアンサー

長くなりそうなので新しく回答します。

こちらで実装しようとしたAddRangeというメソッドは、System.collections.Genericに存在していますが、こちらではなく、A.Models.TEAM_HISにないか見に行っているということでしょうか。

オブジェクト指向をあまり理解されていないですかね?
と言うより、C#歴半年って書いてましたね。。。申し訳ないです。

System.collections.Genericをusingで呼び出したからと言ってそこに記述されているAddRangeがどこででも使用できるというわけではないです。
というよりも、System.Collections.Genericは名前空間なので中にメソッドは無いです。
リンクを参照してみてください。

すみません、理解が追い付いていませんが、addcolはTEAM_HISのコレクションであるから、この場合はAddRangeを使えないということになるのでしょうか。

コレクションという言い方がピンと来ないのですが、Linqをした結果を格納してますので
addcolの型はSystem.Linq.IOrderedQueryable<A.Models.TEAM_HIS>だと思われます。
前述したとおりSystem.Linq.IOrderedQueryableにAddRangeはないので使えないです。

colはaddcolでコレクションを追加していく空の入れ物として作りました。

元々のListなどのAddRangeでもNULLを追加することになり変ではないですか?

すみません、colとaddcolをLINQでの結合の仕方がわからないです。

もし可能でしたら教えていただけますと、AddRangeの問題ではない部分で解決できそうです。

下記コードを参照してみてください。
Dateの時間計算で長くなってしまいそうですが、1人1回のLinqで可能ではないでしょうか。

C#

1using System; 2using System.Linq; 3 4class Program 5{ 6 class 商品情報 7 { 8 public int Id; 9 public string 名前; 10 } 11 12 class 商品販売価格 13 { 14 public int Id; 15 public int 価格; 16 public string 店名; 17 } 18 19 static void Main(string[] args) 20 { 21 商品情報[] 商品情報データ = 22 { 23 new 商品情報() { Id = 1, 名前="PC-8001" }, 24 new 商品情報() { Id = 2, 名前="MZ-80K" }, 25 new 商品情報() { Id = 3, 名前="Basic Master Level-3" }, 26 }; 27 28 商品販売価格[] 商品販売価格データ = 29 { 30 new 商品販売価格() {Id=1, 価格=168000, 店名="BitOut"}, 31 new 商品販売価格() {Id=1, 価格=148000, 店名="富士山音響"}, 32 new 商品販売価格() {Id=2, 価格=178000, 店名="富士山音響"}, 33 new 商品販売価格() {Id=3, 価格=298000, 店名="マイコンセンターROM"}, 34 new 商品販売価格() {Id=3, 価格=229000, 店名="富士山音響"}, 35 }; 36 37 var query = from x in 商品情報データ 38 join y in 商品販売価格データ 39 on x.Id equals y.Id into z 40 select new { Name = x.名前, 商品データ = z }; 41 42 foreach (var 商品 in query) 43 { 44 Console.WriteLine("{0}", 商品.Name); 45 46 foreach (var 価格情報 in 商品.商品データ) 47 { 48 Console.WriteLine("\t{0} {1:C}", 49 価格情報.店名, 価格情報.価格); 50 } 51 } 52 } 53}

LINQ応用編

投稿2016/03/09 11:46

pinnkoro

総合スコア66

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

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

DinKa

2016/03/10 00:35

・オブジェクト指向に関して 正直あまり理解できていないと思います。今回のエラーの発端である、 「using ディレクティブまたはアセンブリ参照が不足しています」 を解決するためとして、ファイルにusing System.Collection.Genericがあるのになぜだめなのかいまだに理解できていません。 初期ではusingをC言語でのIncludeみたいなものだと思っていたのですが、先頭のusingは名前空間を指定しているだけで、他にも使い方があるみたいなことを書いてあった気がします。 ・結合について 内部結合はわかるのですが、今回AddRangeを使えなくて問題になっていいるのは列の追加ではなくて、複数行の追加という意味です。 質問欄にもう1つソースを記述してみます。
pinnkoro

2016/03/10 03:43 編集

エラー文が確実に正しいと思ってはいけないです。 ないはずのAddrangeというメソッドを参照しようとしてるので、コンパイラ的には 「たぶん書いた人がusing書き忘れてたりDLLの参照ミスってんだろうな」 と思ってこういうエラー文が返ってきます。 >>内部結合はわかるのですが、今回AddRangeを使えなくて問題になっていいるのは列の追加ではなくて、複数行の追加という意味です。 複数行を追加したいのであれば、foreach文で1行ずつ取得して1行ずつAddしてみてはどうでしょうか。 >>・オブジェクト指向に関して すごく大雑把に説明しますが、C#の基礎をもう一度勉強しなおしたほうが良いです。 下記ソースがあった時にメインのソースにusing NameAと書くとしましょう。 するとこれはNameAに含まれるclassを使いますよーっていう宣言になります。 もし、中のメソッドを使いたいときはインスタンスを作成して呼び出します。 ClassA classA = new ClassA(); classA.MethodA(); このとき呼び出してるのはClassAのMethodAです。ClassBのMethodAはClassBのインスタンスを作って呼び出すしかないです。 もちろんClassCでMethodAを呼び出そうとしてもClassCでは作成していないので 「using ディレクティブまたはアセンブリ参照が不足しています」 のエラー文が出てくると思います。 すなわちメソッドはそれが作成されたクラスにしか適応されないと思ってください。 参考:ネームスペースとクラス http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_002/csharp_abc01.html namespace NameA { public class ClassA { public void MethodA() {    // 処理A } } public class ClassB { public void MethodB() { // 処理B } } public class ClassC { } }
DinKa

2016/03/10 05:12

C#もですが、オブジェクト指向についてはもう少し勉強しなおしてみます var addcol → List<object> addcol とすることで、AddRangeのエラー自体はなくなりました。 もちろん、LINQの部分でエラーが発生してしまうので、この箇所は何とかしないといけませんが。 このことから、AddRangeがList<>型でないと使えないことがようやく理解できました。 問題が複雑化してしまったので、いったんこれにて本質問は解決とします。 ありがとうございました。
guest

0

なんとなく理解が出来た気がするのでこちらに書かせていただきます。

最終的にされたいこととして、添付されてるエクセルの「出力データ」のように
4カラム+空白1カラム計5カラムで1人分で人数分を横につなげたい ということでよろしいでしょうか。

ごめんなさい、とんでもない勘違いをしていたようです。
下記のような感じでご理解いただけますでしょうか。
参照URL:DbContextを動的に使用する

C#

1using (var db = new DynamicDbContext("DynamicDbContext", type)) 2{ 3  // DbSet<T>プロパティは無いのでSet()メソッドでDbSetインスタンスを取得 4  var dbSet = db.Set(type); 5    6  Console.WriteLine(dbSet.ElementType); // --> Person 7  8  dbSet.AddRange(newEntities); 9  db.SaveChanges(); 10}

投稿2016/03/09 07:00

編集2016/03/09 07:17
pinnkoro

総合スコア66

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

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

DinKa

2016/03/09 07:33

質問を補って理解していただいてありがとうございます。 はい、最終的な目標はエクセルの「出力データ」のように、一人ごとに纏まりをつくるということではあります。 ただ、今の質問用として作成したソースではなく、実際のソースではそれを実装するメソッドは別途用意はされています(EPPlus 4.0.4?)残念ながら解析能力が足りなくて、その箇所は表現できませんが。 そのソースを使うためには、一人の履歴コレクションをアウトプットとして必要としています。こちらもソースコードに付け加えます。 一番知りたい内容としては、一人に関してのAddRangeのエラー解決ではあります。 それ以外にコレクションにコレクションを追加していく方法がありましたら、教えていただけると助かります。
DinKa

2016/03/09 07:59

修正いただいた内容について拝見させていただきました。 理解力が低いため、もうしばらくお時間をいただければと思います。
DinKa

2016/03/09 08:41

応用力が無いようで変換して転記してもうまくいきませんでした。 今回の場合でAddRangeを使う場合は、usingの宛先が動的に変化する?ため、usingの宛先を固定ではなく、プログラムで指定してあげなくてはいけないということでしょうか? この場合、記述していただいたソースは、 namespace A.Report.Historyの前に挿入すればよいでしょうか?
pinnkoro

2016/03/09 08:48 編集

エラーの理由としてはSystem.Linq.IOrderedQueryable<A.Models.TEAM_HIS> にAddRangeというメソッドが存在しないということです。 System.Linq.IOrderedQueryable<A.Models.TEAM_HIS>は、 var addcol = from a in DbContext.TEAM_HIS~~ で返ってきているaddcolが何かを見ていただけるとわかるのではないでしょうか。 下記参照 [MSDN参照](https://msdn.microsoft.com/ja-jp/library/bb340178(v=vs.110).aspx) // 一度データを消します  col = null; となっていたため、!?っとなっているのですが、 addcol.AddRange(col);で追加してる「col」についてもよくわかっていません。 Linqでcolとaddcolを結合するのではダメでしょうか?
DinKa

2016/03/09 09:27 編集

>>エラーの理由としてはSystem.Linq.IOrderedQueryable<A.Models.TEAM_HIS> にAddRangeというメソッドが存在しないということです。  こちらで実装しようとしたAddRangeというメソッドは、System.collections.Genericに存在していますが、こちらではなく、A.Models.TEAM_HISにないか見に行っているということでしょうか。 >>System.Linq.IOrderedQueryable<A.Models.TEAM_HIS>は、 >>var addcol = from a in DbContext.TEAM_HIS~~ >>で返ってきているaddcolが何かを見ていただけるとわかるのではないでしょうか。  すみません、理解が追い付いていませんが、addcolはTEAM_HISのコレクションであるから、この場合はAddRangeを使えないということになるのでしょうか。 >>//一度データを消します >>col=null;  本当はif(m_c > 1) col = null; でしたが、m_c == 1のときの抽出を省くためにnullを改めて入れました。 colを消しているのは、 // 履歴のコレクションで対象に異動がない場合の宣言 で作成したコレクションに追加していくと、データが重複してしまうためです。 型宣言がif文内でできないため、結果的にデータが空の型宣言をするのがスマートなのかもしれませんが、わからなかったためこのような記述になりました。 >>addcol.AddRange(col);で追加してる「col」についてもよくわかっていません。  colはaddcolでコレクションを追加していく空の入れ物として作りました。 >>Linqでcolとaddcolを結合するのではダメでしょうか?  すみません、colとaddcolをLINQでの結合の仕方がわからないです。 もし可能でしたら教えていただけますと、AddRangeの問題ではない部分で解決できそうです。
guest

0

何とかエラーを出なくして、それっぽい形にはなりました。

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.Linq; 5using System.text; 6using System.Threading.Tasks; 7using System.Web; 8using System.Web.Mvc; 9using System.Data.Entity; 10using A.Models; 11 12namespace A.Report.History 13{ 14 /// <summary> 15 /// 個人履歴(Excel)出力 16 /// </summary> 17 public class HistoryGenerator : BaseReportGenerator 18 { 19 /// <summary> 20 /// コンストラクタ 21 /// </summary> 22 public ReportGeneratorService(DbSet dbcontext) 23 : base(dbcontext) 24 {} 25 public void Set() 26 { 27 DateTime start = new DateTime(1900, 1, 1); 28 DateTime next = new DateTime(1900, 1, 1); 29 30 int i_c = 1; 31 // 対象を設定します(今回は仮にAAAとします) 32 var target = (from t in DbContext.CHANGE_HIS 33 where t.name == "AAA" 34 orderby t.date ascending 35 select t).FirstOrDefault(); 36 // CHANGE_HISの異動数を取得します 37 var m_c = (from m DbContext.CHANGE_HIS 38 where m.name == target.name 39 && m.eve != "out" 40 select m).Count(); 41 // outした対象のdateを取得します 42 var loss = (from l in DbContext.CHANGE_HIS 43 where l.name = target.name 44 && l.eve = "out" 45 orderby l.date ascending 46 select l.date).FirstOrDefault(); 47 // 出力対象の経歴コレクションの作成 48 var add_col = (from a in DbContext.TEAM_HIS 49 orderby a.date ascending 50 select a) 51 // AddRange関数を使用するためにList型にキャスト 52 List<TEAM_HIS> col = new List<TEAM_HIS>(); 53 54 // 履歴のコレクションを作成 55 foreach (var forlist in t_col) 56 { 57 // カウントが1の時はnextが設定されていないため 58 if(i_c == 1); 59 { 60 start = (from s in DbContext.CHANGE_HIS 61 where s.team = forlist.team 62 && s.date >= start 63 orderby s.date, no ascending 64 select s.date).FirstOrDefault(); 65 } 66 else 67 { 68 start = next; 69 } 70 // カウントがMAXでない場合は計算する 71 if (m_c >= i_c) 72 { 73 // TEAMの移動が無い場合は次の時間をセット(ただし1回目は除く) 74 if(i_c != 1 & start == next) 75 { 76 next = (from n in DbContext.CHANGE_HIS 77 where n.team == forlist.team 78 && n.date > start 79 orderby n.date, n.team ascending 80 select n.date).FirstOrDefault(); 81 }else{ 82 next = (from n in DbContext.CHANGE_HIS 83 where n.team == forlist.team 84 && n.date >= start 85 orderby n.date, n.team ascending 86 select n.date).FirstOrDefault(); 87 } 88 }else{ 89 next = DateTime.Now; 90 } 91 // TEAM毎の個人履歴をセット 92 addcol = from a in DbContext.TEAM_HIS 93 where a.team == forlist.team 94 && a.start < next 95 && a.start >= start 96 && a.start < loss 97 orderby a.start ascending 98 select a; 99 // 個人履歴に追加 100 if(addcol != null) col.AddRange(addcol); 101 ++i_c; 102 } 103 104 105 foreach (var his in col) 106 { 107 var hist = new History(target); 108 hist.Name = target.name; 109 hist.Team = his.team; 110 hist.Project = his.project; 111 hist.Start = his.start; 112 hist.End = his.end; 113 target.Histories.Add(hist); 114 } 115 target.ColStartPos = cols; 116 cols += target.OutputWidth() + 1; 117 } 118 } 119}

やり方としては、<TEAM_HIS>をList<>にキャスト?したのですが、
「最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 」
というエラーが何度も出てきましたが、無事解決できました。
ただ、実際にデータが正しく出てくるかはまだ未知数なので、1日がかりのテストに取り掛かる予定です。

ご協力ありがとうございました。

投稿2016/03/10 08:49

編集2016/03/15 00:19
DinKa

総合スコア40

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

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

DinKa

2016/03/14 04:55 編集

追記ご報告をします 最終的にはAddRangeを使用することができました また、実際のプログラムで実行してみたところ、所々プログラムの設計ミスがあったりして、検証にはかなり時間を掛かってしまいました 子だとコードが見づらくなってしまうので、親のほうに反映させます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問