0

MVCアプリのViewModelに、子テーブルに結合された親テーブルのデータを入力しようとしています。子テーブルに必要な唯一のデータは、上位3つのレコードの命名法フィールドからのコンマで区切られた文字列であり、それらをViewModelの文字列フィールドに配置します。これが私が成功せずに試したことです:

public IEnumerable<ReqHeaderVM> GetOpenReqs(string siteCode)
    {
      var openReqs = from h in context.ReqHeaders
      join l in context.ReqLineItems on h.ID equals l.ReqID into reqLineItems
       select new ReqHeaderVM
       {
         ReqID = h.ID,
         ShopCode = h.ShopCode
         Nomenclatures = reqLineItems.Select(x => x.Nomenclature).Take(3) // This doesn't work

       };
        return (openReqs.ToList());
    }     

ViewMdelは次のとおりです。

    public class ReqHeaderVM
{
    [Editable(false)]
    public string ReqID { get; set; }
    public string ShopCode { get; set; }
    public string  Nomenclatures {get; set;}


}
4

2 に答える 2

1

ReqHeaders と ReqLineItems の間に適切な関係 (外部キー) があると仮定すると、探しているものが得られるはずです...

public IEnumerable<ReqHeaderVM> GetOpenReqs(string siteCode)
{
    var openReqs = from h in context.ReqHeaders
                    select new
                    {
                        ReqID = h.ID,
                        ShopCode = h.ShopCode
                        Nomenclatures = h.ReqLineItems
                            .OrderBy(x => x.SomeColumn)
                            .Select(x => x.Nomenclature)
                            .Take(3)
                    };

    var openReqsTran = from oreq in openReqs.AsEnumerable()
                        select new ReqHeaderVM
                        {
                            oreq.ReqID,
                            oreq.ShopCode,
                            Nomenclatures = string.Join(", ", oreq.Nomenclatures)

                        };

    return (openReqsTran);
}     

Nomenclatures は Nomenclature のタイプのリストであることに注意してください。

于 2012-12-04T20:35:24.290 に答える
0

はい、結合は単一のデカルト結果セットを作成します。(表形式のデータを考えてください)何をしようとしているのか。必要な結果を得るには、いくつかの選択肢があります。

  1. 遅延読み込みを使用し、各ヘッダーを繰り返し処理して、項目を個別にクエリします。
    1. pro - 簡単なクエリ
    2. con - n+1 を選択
  2. すべてのヘッダーとすべての明細項目を照会しますが、上位 3 つだけでビュー モデルを構築します
    1. プロ - 単一のクエリ
    2. con - 大規模なデカルト結果セット クエリのデータが多すぎる
  3. すべてのヘッダーと関連するすべての明細を個別に問い合せます
    1. pro - 2 つの小さくて単純なクエリ
    2. con - 行の詳細を照会しすぎます。
  4. 2 つのクエリですべてのヘッダーとヘッダーごとに上位 3 行を照会する
    1. プロ - 必要な情報だけを入手
    2. con - ヘッダーごとに上位 3 行の複雑なクエリ。
于 2012-12-04T20:34:34.870 に答える