この SQL スクリプトを linq に変換するのに少し問題があります。「fn_Split_t」関数は、カンマ区切りの値を単純に分割します。私を混乱させているのは、そこにあるグループです。
declare @count int
select @count = COUNT(*) from dbo.fn_Split_t(@portfolios)
select
cc.CustodianCommentId
,cc.[Message]
,Symbol = NULL
,cc.DateStamp
,cc.AppUser
,PositionDate = @date
,cc.[Status]
,cc.Category
,cc.[Group]
from dbo.CustodianComment cc
join dbo.CustodianCommentPortfolio ccp on ccp.CustodianCommentId = cc.CustodianCommentId
join dbo.CustodianPortfolio cp on ccp.CustodianPorfolioId = cp.CustodianPortfolioId
join dbo.fn_Split_t(@portfolios) s on s.items = cp.PortfolioCode
where cp.PositionDate = @date
group by cc.CustodianCommentId, cc.[Message], cc.DateStamp, cc.AppUser, cc.[Status], cc.Category, cc.[Group]
having count(cc.CustodianCommentId) = @count
order by cc.DateStamp desc
試行番号 1 の結果は次のとおりです。
from c in Context.Comments
join pc in Context.PortfolioComments on c.CommentId equals pc.CommentId
join p in Context.Portfolios on pc.PortfolioId equals p.PortfolioId
where portfolios.Contains(p.PortfolioCode)
&& p.PositionDate == EntityFunctions.TruncateTime(date)
group c by c.CommentId into g
where g.Count() > portfolios.Count()
select new
{
CommentId = c.CommentId,
Message = c.Message,
DateStamp = c.DateStamp,
AppUser = c.AppUser,
PositionDate = p.PositionDate,
Status = c.Status,
Category = c.Category,
CategoryId = c.CategoryId,
Group = c.Group
}
ただし、匿名オブジェクトの c がスコープ内にないため、これは機能しません。ちなみに、portfolios は、SQL スクリプトで @portfolios に渡される csv 文字列と同じです。私は今これにちょっと立ち往生しているので、どんな助けも大歓迎です!ありがとうございました!