我想将现有存储过程的功能重新创建为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中写这个?
答案 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。