0

我想将现有存储过程的功能重新创建为 LINQ 表达式。该过程使用“STUFF”函数将子表中的前三个字段返回到存储过程的一个字段中。我将添加一个过程片段作为参考:

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 回答