[英]Linq c# - before joining two result sets how to use use SQL partition over rownumber logic in linq
I am very new to LINQ and I am trying to convert the below SQL query to C# linq query: I am not sure how to use SQL partition by in LINQ. Please guide我是 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
As your SQL doesn't correlate with the sheet image you attached (where are TableC and OriginalDetailID?), I might miss here but you should achieve the same result with the below LINQ query由于您的 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
};
Note that this code does not simulate the PARTITION BY
clause as it seems redundant.请注意,这段代码没有模拟
PARTITION BY
子句,因为它看起来是多余的。 If you wish to still use it, you should utilize the GroupBy
and OrderBy
LINQ methods like in this example:如果您仍然希望使用它,您应该使用
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.