2012-02-08 16 views
0

私は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回反復するだけで、そうですか。

答えて

0

私はLINQのとMVCとその大きな専門家ではないんだけど、私はあなたの問題になり直面する:ビューを表示する事を心配する必要があることを教えられた後、コントローラ/モデルにおけるデータの準備と

  1. ディールを、のみ。
  2. 私はあなたの特定の問題を解決するために、これらのトピックからの知識を使用します。 Using LINQ to concatenate strings

    C):集計関数として Group By Multiple Columns

    b)の連結:

    a)は、複数の列でグループ化複数列による集約およびグループ化の使用 How to write a LINQ query combining group by and aggregates?

ビューモデルにデータが含まれたら、表示するだけです。