如何编写从子表中拉出前三行的Linq查询

时间:2012-11-27 22:55:49

标签: linq entity-framework linq-to-entities

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

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中写这个?

1 个答案:

答案 0 :(得分: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。