SQL 使用 group / sum / having 查询 LINQ
SQL query to LINQ using group / sum / having
我一直在尝试将以下查询从 SQL 转换为 LINQ,我查询的主要目的是查找同一发件人的两个或多个交易,其中金额的总和 >= 2000
SELECT t.TXN_SENDER_ID,
s.SEN_FIRSTNAME,
s.SEN_LASTNAME,
SUM(t.TXN_AMOUNT)
FROM TRANSACTIONS t
INNER JOIN SENDERS s ON s.SEN_ID = t.TXN_SENDER_ID
WHERE t.TXN_DATE BETWEEN Dateadd(YEAR, -3, Getdate()) AND Getdate()
GROUP BY t.SENDER_ID, s.SENDER_NAME, s.SENDER_LASTNAME
HAVING SUM(t.TXN_AMOUNT) > 2000
这是我尝试过的方法:
var query = from t in context.TRANSACTIONS
join s in context.SENDERS on t.TXN_SENDER_ID equals s.SEN_ID
group new { t, s } by new { t.TXN_SENDER_ID, s.SEN_FIRSTNAME, s.SEN_LASTNAME, t.TXN_AMOUNT } into gr
where (gr.Sum(x => x.t.TXN_AMOUNT) > 1000)
select new { gr.Key.TXN_AMOUNT, gr.Key.SEN_FIRSTNAME, gr.Key.SEN_LASTNAME };
提前致谢
好的,您还没有回答我的问题,但是查看您的 sql 查询您想过滤 TXN_DATE
上的数据。我的最佳猜测:
DateTime dtFrom = DateTime.Today.AddDays(-3);
DateTime dtTo = DateTime.Today;
var query = from t in context.TRANSACTIONS
.Where(tr=>tr.TXN_DATE>=dtFrom && tr.TXN_DATE<=dtTo)
join s in context.SENDERS on t.TXN_SENDER_ID equals s.SEN_ID
group new { t, s } by new { t.TXN_SENDER_ID, s.SEN_FIRSTNAME, s.SEN_LASTNAME, t.TXN_AMOUNT } into gr
where (gr.Sum(x => x.t.TXN_AMOUNT) >= 2000)
select new
{
gr.Key.TXN_SENDER_ID,
gr.Key.SEN_FIRSTNAME,
gr.Key.SEN_LASTNAME,
gr.Sum(a=>a.TXN_AMOUNT)
};
我一直在尝试将以下查询从 SQL 转换为 LINQ,我查询的主要目的是查找同一发件人的两个或多个交易,其中金额的总和 >= 2000
SELECT t.TXN_SENDER_ID,
s.SEN_FIRSTNAME,
s.SEN_LASTNAME,
SUM(t.TXN_AMOUNT)
FROM TRANSACTIONS t
INNER JOIN SENDERS s ON s.SEN_ID = t.TXN_SENDER_ID
WHERE t.TXN_DATE BETWEEN Dateadd(YEAR, -3, Getdate()) AND Getdate()
GROUP BY t.SENDER_ID, s.SENDER_NAME, s.SENDER_LASTNAME
HAVING SUM(t.TXN_AMOUNT) > 2000
这是我尝试过的方法:
var query = from t in context.TRANSACTIONS
join s in context.SENDERS on t.TXN_SENDER_ID equals s.SEN_ID
group new { t, s } by new { t.TXN_SENDER_ID, s.SEN_FIRSTNAME, s.SEN_LASTNAME, t.TXN_AMOUNT } into gr
where (gr.Sum(x => x.t.TXN_AMOUNT) > 1000)
select new { gr.Key.TXN_AMOUNT, gr.Key.SEN_FIRSTNAME, gr.Key.SEN_LASTNAME };
提前致谢
好的,您还没有回答我的问题,但是查看您的 sql 查询您想过滤 TXN_DATE
上的数据。我的最佳猜测:
DateTime dtFrom = DateTime.Today.AddDays(-3);
DateTime dtTo = DateTime.Today;
var query = from t in context.TRANSACTIONS
.Where(tr=>tr.TXN_DATE>=dtFrom && tr.TXN_DATE<=dtTo)
join s in context.SENDERS on t.TXN_SENDER_ID equals s.SEN_ID
group new { t, s } by new { t.TXN_SENDER_ID, s.SEN_FIRSTNAME, s.SEN_LASTNAME, t.TXN_AMOUNT } into gr
where (gr.Sum(x => x.t.TXN_AMOUNT) >= 2000)
select new
{
gr.Key.TXN_SENDER_ID,
gr.Key.SEN_FIRSTNAME,
gr.Key.SEN_LASTNAME,
gr.Sum(a=>a.TXN_AMOUNT)
};