使用 Linq to SQL 可以检索两个值并减去它们
本文关键字:两个 SQL to Linq 检索 使用 | 更新日期: 2023-09-27 18:37:14
我正在使用Linq to SQL填充一个类。
我正在尝试做的是查询我的数据库,返回两个整数值并相互减去这两个值,产生结果,但我想不出一种聪明的方法。
在这种情况下我该怎么办?
如果不清楚,那么这个伪代码实现应该阐明我希望什么功能:
DECLARE @currentVal INT, @previousVal INT
@currentVal = SELECT VALUE
FROM Table1
WHERE Date = CURRDATE()
@previousVal = SELECT VALUE
FROM Table1
WHERE Date = MIN(Date)
RETURN @currentVal - @previousVal
但是在 Linq to SQL 中,(from o in context.Table1 where Date = currentDate select Value)
,我如何从中减去其他值?这可能吗?
我坚持将其作为一组分解的查询,因为您可以测试值是否实际返回并处理返回太多值的情况:
var currentValResults = (from row in rows
where row.Date == DateTime.Now
select row.Value)
.ToArray();
var previousValResults = (from row in rows
let minDate = rows.Min(r => r.Date)
where row.Date == minDate
select row.Value)
.ToArray();
if (currentValResults.Length == 1 && previousValResults.Length == 1)
{
var diff = currentValResults[0] - previousValResults[0];
}
else
{
// Error condition?
}
将它们全部放入一个巨大的 linq 语句中会产生太多假设(或者至少,我的实现确实如此)。
为什么不简单地进行交叉连接
var query=
from a in Table1 where a.Date == DateTime.Now
from b in Table1 where b.Date == Table1.Min(c=>c.Date)
select a.Amount - b.Amount;
var result=query.First();
这样的事情可以将其保留在一次数据库之旅中(请记住,这假设只会返回两个结果):
int[] values = (from o in context.Table1
where Date = currentDate || Date = context.Table1.Min(x => x.Date)
order by Date descending
select value).ToArray();
return values[0] - values[1];
var currentVal = context.Table1.FirstOrDefault(t=>t.Date == DateTime.Now.Date);
var previousVal = context.Table1.FirstOrDefault(t=>t.Date == context.Table1.Min(d=>d.Date));
var result = currentVal - previousVal;
或
from d in context.Table1
let prevVal = context.Table1.FirstOrDefault(t=>t.Date == context.Table1.Min(d=>d.Date));
where d.Date == DateTime.Now.Date
return new { d - prevVal };