[英]Linq c# - before joining two result sets how to use use SQL partition over rownumber logic in linq
我是 LINQ 的新手,我正在嘗試將以下 SQL 查詢轉換為 C# linq 查詢:我不確定如何在 LINQ 中使用 SQL 分區。請指導
SELECT A1.RowNo, B1.DetailID, A1.ID
FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY DetailID ORDER BY A.ID) As RowNo, A.ID , A.DetailID
FROM TableA A
INNER JOIN TableB B
ON A.DetailID = B.ID
) A1
INNER JOIN
(
SELECT ROW_NUMBER() OVER(PARTITION BY OriginalDetailID ORDER BY ID) As RowNo, DetailID AS DetailID
FROM TableC
WHERE ProductName = @productName
) B1
ON A1.DetailID = B1.DetailID AND A1.RowNo = B1.RowNo
由於您的 SQL 與您附加的工作表圖像不相關(TableC 和 OriginalDetailID 在哪里?),我可能會錯過這里,但您應該使用以下 LINQ 查詢獲得相同的結果
var query = from a in TableA
join b in TableB on a.DetailID equals b.ID
join c in TableC on a.DetailID equals c.OriginalDetailID
where c.ProductName == productName
select new
{
RowNo = c.ID,
DetailID = c.DetailID,
ID = a.ID
};
請注意,這段代碼沒有模擬PARTITION BY
子句,因為它看起來是多余的。 如果您仍然希望使用它,您應該使用GroupBy
和OrderBy
LINQ 方法,如本例所示:
var query = from a in TableA
join b in TableB on a.DetailID equals b.ID
join c in TableC on a.DetailID equals c.OriginalDetailID
where c.ProductName == productName
orderby a.ID
group a by a.DetailID into g
select new
{
RowNo = g.OrderBy(x => x.ID).Select((x, i) => new { x, i }).ToDictionary(x => x.x, x => x.i + 1),
DetailID = g.Key,
ID = g.Select(x => x.ID)
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.