0

私はAsp.Net、MVC3、Linq、およびそれに関連する他のすべてに不慣れです。私はPHPとColdFusionに非常に慣れているので、無知を許してください。基本的に、私がやろうとしているのは、cfoutputのグループ属性と同等の機能を実行できるColdFusionでの状況を再現することです。私はストアドプロシージャを呼び出してから実行することに慣れています

<cfoutput group="id">

次に、データが異なる列の別の内部cfoutput。チャームのように機能します!Asp.Netではそれほど多くはありません。

1対多の関係で2つのテーブルから結合を返すストアドプロシージャを引き続き使用したいと思います。たとえば、フルネーム、タイトル、卒業年の3つの列があるとします。卒業年は結合されたテーブルの列であるため、ストアドプロシージャの結果は次のようになります。

ジム教授2005
ジム教授2008
ジム教授2011

これをビューに送信します。次に、列の1つ(おそらくフルネーム)に基づいてデータをグループ化するのがビューの仕事だと思います。3列のHTMLテーブルを出力したいのですが、この状況では1行になります。

ジム教授2005、2008、2011

私はグループキーと呼ばれるこのことを使用するたくさんの例をグーグルで検索しました。1つの値「Jim」(またはグループ化された値)を出力するだけでは興味がないため、これは役に立たないようです。各行に「Jim」と「Professor」の両方の値を出力する必要があります。私の考えでは、2つのforeachループが必要です。外側のループはフルネームとタイトルを表示し、内側のループは卒業年のすべての可能な一致を通過します。特にこのIGrouping構文では、グループで卒業年を取得できないようです。キーは1つの値しか格納できず、その行のすべての値が必要です。実際に繰り返す必要があるのは1つまたは2つの値だけです。セカンダリlinqグループ化を実行した後、カスタムビューモデルを作成して、それを厳密に型指定されたビューに送信する必要がありますか?

編集: わかりました、動作するコードがありますが、基本的にストアドプロシージャから持っているすべての列/値を再定義する必要があるため、非常に非効率的です。ストアドプロシージャを忘れて、すべてにLINQを使用したくなります。私が求めていたのは、一種の「複数の列のグループ」であり、リンクは非常に役立ちました。

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回だけ繰り返します。そうか。

4

2 に答える 2

0

私はLinqとMVCの専門家ではありませんが、あなたの問題に直面した場合、私は次のようにします:

  1. ビューは物事の表示のみに関係するべきだと教えられた後、コントローラー/モデルでデータの準備に対処します。
  2. これらのトピックの知識を使用して、特定の問題を解決します。

    a) 複数の列によるグループ化: 複数の列によるグループ

    b) 集計関数としての連結: LINQ を使用して文字列を連結する

    c) 複数の列による集計とグループ化の使用 group by と集計を組み合わせた LINQ クエリを作成する方法は?

ビューモデルにデータを入れたら、それを表示するだけです。

于 2012-02-08T23:16:00.843 に答える
0

私が探していたものを解決する方法をついに見つけたと思います。「グループ参加」は私の問題を簡単に解決するようです。このページで見つけた情報で解決しました:http://geekswithblogs.net/WillSmith/archive/2008/05/28/linq-joins-and-groupings.aspx

于 2012-11-07T21:05:45.513 に答える