私はAsp.Net、MVC3、Linq、およびそれに関連するその他すべてを初めて使用しています。私はPHPとColdFusionにとても慣れていますので、私の無知を許してください!基本的に私がやろうとしているのは、ColdFusionでcfoutputのグループ属性に相当する処理を実行できる状況を再作成することです。私はこれだけのストアドプロシージャを呼び出した後、LINQ to SQLグループ化してビューに渡す
<cfoutput group="id">
と非明確なデータを持っている任意の列に対して、別の内側のcfoutputをやってするのに使用しています。魅力的な作品!あまりAsp.Netではありません。
私は、1対多の関係を持つ2つのテーブルから結合を返すストアドプロシージャを使用しています。たとえば、私は3つの列を持っているとしましょう:フルネーム、タイトル、卒業年。
ジム・教授2005
ジム・教授2008年、私が見るにこれを送ります
ジム・教授2011
:ストアドプロシージャからの私の結果は次のようになりますので、卒業年度は、連結したテーブルの列です。私は、列の1つ(恐らくフルネーム)に基づいてデータをグループ化するのがViewの仕事であると仮定しています。私は、出力に3列のHTMLテーブルをしたいと、このような状況で私は1つの行だろう:私はグループキーと呼ばれるこの事を使用する例のトンをGoogleで検索している
ジム・教授2005年、2008年、2011
を。これは私がちょうど1つの値 "ジム"(またはグループ化された値が何であれ)を出力することに興味がないので私を助けてくれないようです、各行に "Jim"と "Professor"の両方の値を出力する必要があります。私の考えは、2つのforeachループが必要です。外側のループはフルネームとタイトルを表示し、内側のループは卒業年のすべての可能なマッチを通過します。グループで卒業年を取ることはできません。特に、このIGroupingの構文を使ってください。キーは1つの値しか格納できず、その行にはすべての値が必要ですが、実際には1つまたは2つの値を反復処理する必要があります。二次的なlinqグループ化を実行した後、厳密に型指定されたビューに送信すると、カスタムビューモデルを作成して作成する必要がありますか?
EDIT: [OK]を、私は動作しますが、私は基本的に私は私のストアドプロシージャから持っていた列/値のすべてを再定義するために持っているとして、それは非常に非効率的と思われるコードを持っています。ほとんどの場合、ストアドプロシージャを忘れて、LINQをすべてのものに使用したいと思っています。私が求めていたのは、ある種の「複数列のグループ」と、linkが大いに助けてくれたようです。
var records = db.getRecords();
var groups = from r in records
group r by new
{
r.id
}
into row
select new ListVM()
{
id = row.Key.id,
fullname = row.Select(x => x.fullname).First(),
title = row.Select(x => x.title).First(),
degrees = row.Select(x => x.degree_name).ToList(),
majors = row.Select(x => x.major_name).ToList()
};
return View(groups);
もちろん、これを動作させるにはViewModelを作成する必要がありました。私の見解では、forループを使って度とメジャーリストを繰り返し処理することができます。これを行うにはこれが最善の方法ですか?私は一般的に、グループのキーを1回だけ表示し、ほとんどすべての例を反復するのではなく、20行の行にリストを1回または2回反復するだけで、そうですか。