0

既存のストアドプロシージャの機能をLINQ式として再現したいと思います。このプロシージャは、「STUFF」関数を使用して、子テーブルの上位3つのフィールドをsprocの1つのフィールドに返します。の手順の抜粋を参照として追加します。

SELECT h.ReqHeaderID,   

STUFF((SELECT TOP(3) ', ' +  l.Nomenclature     FROM    ReqLineItems  l
                                                WHERE l.ReqID  = h.ReqID 
   FOR XML PATH ('')    ),1,1, '')

As OrderedItems

FROM    ReqHeader           h

これをLINQで書く方法はありますか?

4

1 に答える 1

0

おそらく、クエリ構文の句であるgroup joinを使用できます。join into

(from reqHeader in db.ReqHeaders
 join reqLineItem in db.ReqLineItems 
     on reqHeader.ReqID equals reqLineItem.ReqId into reqLineItems
 select new 
        {  
            reqHeader.ReqHeaderId,
            Nomenclatures = reqLineItems.Select(x => x.Nomenclature).Take(3)
        })
.AsEnumerable()
.Select(x => new
             {
                 x.ReqHeaderId,
                 Nomenclatures = String.Join(", ", x.Nomenclatures.ToArray())
             })

呼び出した後に文字列をAsEnumerable()結合しました。これは、LINQ to Objects でのみ文字列を結合でき、Linq to Entities では結合できないと考えているためです。

于 2012-11-28T02:40:58.750 に答える